대칭형(비밀키 암호) 알고리즘 (Symmetric Key Algorithm. Ex : 3DES, AES)
평문(Plain Text) : 아무 변조가 가해지지 않은 원본 문서
싸이퍼 텍스트(Ciper Text) : 변조된 문서 (암호화된 문서)
암호화와 복호화 시 한개의 같은 키를 사용하는 것이 가장 큰 특징이다.
(※ 알고리즘 자체가 상대적으로 비대칭형에 비해선 가벼운 편)
수신자 측과 송신자 측간에 서로 비밀키 교환이 있어야 하는데, 이때 중간자 공격이 발생할 가능성이 존재한다.
중간자 공격
- B가 대칭키 방식으로 암호문을 만들었다.
- A에게 인터넷을 통해서 키를 전달
- Cracker 에게 이 과정에서 키와 메시지가 유출될 수 있다.
대칭형 알고리즘 에서 암호화를 하는 방식은 2가지가 있다.
스트림 암호 알고리즘 (AES)
일반적으로 한 번에 1비트의 데이터 흐름(스트림)을 순차적으로 처리해가는 암호 알고리즘의 총칭으로 평문과 키 스트림을 XOR 하여 생성한다. 1비트 단위로 생성된 난수열과 평문을 XOR 연산하여 1비트의 암호화된 자료를 얻는다.
블록 암호 알고리즘(DES)
2.1) Feistel 구조
동일한 특정 함수(round function)의 반복으로 암호화를 합니다.
<과정>
- 평문을 같은 크기의 L과 R로 나눈다.
- 우선 R과 K로 라운드 함수 F를 실행한다.
- 라운드 함수 R의 실행 결과와 L을 XOR 하고 연산된 값을 R로 사용한다.
- 라운드 크기만큼 반복하면 암호문이 완성되며 복호화 과정은 L과 R만 바꿔주면 된다.
<특징>
- 암호화와 복호화 과정이 동일하다. (거꾸로 하고 키 입력만 반대로)
- 라운드 수(16회 이상), K의 길이(128bit 이상), 평문의 길이(64 bit 이상) 을 권장한다.
- 평문을 나눈 길이가 같지 않을 경우 구조 또한 존재한다.
- SPN 의 비해서 간단한 구조를 가진다.
2.2) SPN 구조
문자의 자리를 변경하는 P-BOX, 문자를 규칙에 따라 치환하는 S-BOX, 암호화에 사용되는 키 K로 구성
<과정>
- 평문과 K를 XOR 연산한다.
- 연산된 결과를 여러 개의 작은 블록으로 나눈다.
- 나눠진 각각의 작은 블록들을 S-BOX에 넣어 특정한 방법으로 처리한다.
- 처리된 결과를 P-BOX에서 문자의 자리를 변경한다.
- 위 과정을 반복하여 암호문을 완성한다.
<특징>
- 별도의 복호화 모듈을 구현해 주어야 한다.
- 암호화 과정 : 평문을 연산 → S-BOX → P-BOX → 암호문 생성
- 복호화 과정 : 암호문 → 역방향 P-BOX → 역방향 S-BOX → 평문
- 암호화/복호화 시 비트를 이동시켜주어야 하는 Feistel 구조에 비해 효율적이다
P-Box
문자의 자리를 변경하는 전자 암호 장치
- Straight P-Box
입력받은 데이터의 순서만을 바꿔 똑같은 길이의 데이터로 변환하는 방식 (기존 데이터의 길이 = 변경 후 데이터의 길이) 역방향으로 하면 평문을 알아내기 쉬운 방식이다.(P-Box 방식만 썼을때는 문제가 된다.)
- Compression P-Box
입력받은 데이터를 축소하여 줄어든 길이의 데이터를 출력 (기존 데이터의 길이 > 변경 후 데이터의 길이) 입력되는 몇몇 데이터는 소실되어 단방향 암호화이고 복호화가 불가능하다.
- Expansion P-Box
입력받은 데이터를 확장하여 늘어난 길이의 데이터를 출력한다. (기존 데이터의 길이 < 변경 후 데이터의 길이) 마찬가지로 단방향 암호화이다.
S-Box
몇개의 입력 비트(m)을 사용하여 일부 출력 비트(n)로 변환한다.
- XOR
평문 x와 암호화에 사용되는 키 K를 XOR 연산하여 암호문 y를 출력
- Circular Shit
비트 좌측이나 우측으로 쉬프트 연산한다.
- Swap
비트의 앞 뒤를 바꾼다.
- Split and Combine
특정 비트를 분할하고 결합한다.
비대칭키(공개키) 알고리즘 (Asymmetric Key Algorithm, Ex : RSA)
PKI(Public Key Infrastructure) - 공개키 기반구조란?
대칭형(비밀키 암호) 알고리즘은 암호화하는 키와 복호화 하는 키가 같은 대칭키 알고리즘을 사용하여 정보를 교환하였는데 구현이 상대적으로 쉽고 빠르다는 장점이 있지만, 키를 sniffing 이나 sppofing 해킹으로 빼앗겨버린다면 제 3자에게 정보가 쉽게 노출될 수 있다는 단점이 있습니다.
그래서 암호화를 하는 키와 복호화키를 따로 가져가는 기술이 등장 - 이런 기반을 마련해둔 것이 PKI 입니다.
Private Key : 누구와도 공유하지 않고 자신만이 가지고 있는 키
Public Key : 공개적으로 공개가 되어 있는 키, 누구나 공개키를 얻을 수 있음
즉 기본적으로 인터넷과 같이 안전이 보장되지 않은 공개된 망 사용자들이 한쌍의 공개키와 개인키를 사용함으로써, 안전하게 데이터를 교환할 수 있게 합니다.
장점
- 대칭키 암호 시스템 보다 보안적으로 우수하다.
- 인증과 부인봉쇄 기능을 제공할 수 있다.
단점
- 대칭키 암호 시스템 보다 많은, 더긴 키를 사용하여야 하고 수학적 연산이 상대적으로 복잡하여 암호화 처리시간이
길다. - 공개키에 대한 신뢰성 문제가 있으므로 PKI와 같은 복잡한 공개키 관리 구조를 필요로 한다.
PKI를 사용한 정보교환에서 크게 두가지 상황을 가정할 수 있습니다.
<첫번쨰>
A의 공개키를 사용하여 암호화하고 A에게 보냅니다. 그리고 오직 A만 자신의 개인키를 이용해 암호문을 복호화 시킵니다.
<두번째>
개인키를 가지고 암호화하는 경우입니다. 공개키는 만인에게 공개되어 있으므로 아무나 쉽게 암호문을 복호화 할 수 있습니다.
이 두가지 방법이 바로 공개키 암호화, 전자서명 입니다.
그런데, 앞서 말씀드린대로 공개키는 말그대로 공개되어있기 때문에 전자서명의 경우 해당 공개키가 과연 내가 원하는 공개키가 맞는지 의심할 수가 있습니다.
그래서 신뢰할 수 있는 인증기관(CA:Certificate Authority)가 등장합니다.
- 속도를 향상시키기 위해 임시 대칭키를 생성한다.
- 임시 대칭키를 통해 평문을 암호화(Encrypt) 하여 싸이퍼문(Cipher Text)로 변경한다.
- 임시 대칭키를 메시지를 받을 A의 공개키로 암호화(Encrypt) 한다.
- 싸이퍼문(Cipher Text)와 암호화된 대칭키를 상대방한테 보낸다.
- 암호화된 대칭키를 자신의 개인키로 복호화하여 대칭키를 얻어내고 복호화(Decrypt) 한다.
RSA 암호
- 특정 소수 두개를 선택한다 p = 11, q = 3
- n = p*q = 33 을 계산한다.
- φ(n) = **(p-1)(q-1) = 102 = 20을 계산한다.
- 공개키 구하기 → φ(n) 보다 작으면서 서로소 e를 하나 선택한다. 서로소 : 두 정수의 공약수가 1외에는 없는 수 (서로소 (gcd(e, φ(n)) = 1), e = 1, 3, 7, 9, 11, 13 ,17 ,19)
- 개인키 구하기 → 160보다 작으면서 d*e mod 160 = 1 인 수 d를 결정한다. (mod : 나머지 연산 e : 3 일때 d = 7)
- 이로써 공개키 = {33, 3} , 개인키 = {33, 7} 을 얻을 수 있다.
평문이 88이라고 하면 암호화 숫자는 88^7 nid 187 = 11 이다.
💡 참고링크
https://crazia.tistory.com/entry/PKI-PKI-의-기본-개념-간단-설명
https://skogkatt.tistory.com/16
https://skogkatt.tistory.com/23?category=845921
'정보보안' 카테고리의 다른 글
PKI 인증 체계 (0) | 2023.08.10 |
---|---|
CA, x509 (0) | 2023.08.10 |
전자서명, 전자서명 생성 / 검증 (0) | 2023.08.10 |
단방향 암호와 기법(Hash) (0) | 2023.08.10 |
보안 개념 (0) | 2023.08.10 |