[Dreamhack] 현대 암호
# 서론
- 대칭키 암호 시스템(Symmetric Key Cryptosystem): 송신자와 수신자가 같은 키를 공유해야하는 암호 시스템
- ex) 카이사르 암호, 비제네르 암호
- 같은 키를 갖고 있어야 하는 특성상, 대칭키 암호 시스템은 사전에 서로 키를 공유하는 과정이 반드시 필요하다.
- 키 공유 알고리즘(Key-sharing Algorithm): 외부인이 키가 공유되는 과정을 도청해도, 공유되는 키는 알지 못하게 하는 방법
- 현대에 많은 데이터가 오가는 네트워크는 도청에 취약하므로 키를 평문으로 공유하기에 부적절하기에 시작된 연구이다.
- Diffie와 Hellman이 Diffie-Hellman 키 교환 알고리즘 제시
- 송신자와 수신자가 서로 다른 키를 사용하는 공개키 암호 시스템의 개념을 창안
- 이는 대칭키와 대비되어 비대칭키 암호 시스템(Asymmetric Cryptography)라고 불림
# 현대 암호
1. 혼돈
- 암호문에서 평문의 특성을 알아내기 힘든 성질
- ex) 단일 치환 암호를 사용하여 같은 평문을 두 번 암호화하면 출력된 두 암호문은 서로 같을 것. 공격자는 암호문을 보고 평문이 무엇인지 유추하지는 못하더라도 암호문을 생성한 두 평문이 같다는 것을 알 수 있음.
- 위의 예시를 통해 단일 치환 암호는 혼돈 성질을 만족하지 못한다는 것을 알 수 있음
2. 확산
- 평문의 작은 변화가 암호문의 큰 변화로 이어지는 성질
- 대부분의 고전 암호에서 찾아보기 힘든 성질임
3. 대칭키 암호 시스템
- 암호화와 복호화에 같은 키를 사용하는 암호 시스템
- 크게 블록 암호와 스트림 암호로 구분
3.1 블록암호
- 블록 암호(Block Cipher)는 평문을 정해진 크기의 블록 단위로 암호화하는 암호
- ex) 블록의 크기가 4바이트라면 평문을 4바이트의 블록으로 쪼개어 각 블록마다 암호화를 진행
- 평문의 크기가 블록 크기의 배수가 아니어서 블록으로 균등하게 쪼갤 수 없을 경우, 평문 뒤에 데이터를 추가하는 패딩(Padding)을 먼저 수행
- 패딩은 평문이 블록 크기의 배수가 될 때까지 데이터를 추가함
- 블록 암호의 대표적인 예시로는 DES와 AES가 있음
3.2 스트림 암호
- 스트림 암호(Stream Cipher): 송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문에 XOR하는 암호
- 평문을 P, 암호문을 C, 스트림을 X라고 할 때, 암호문 C는 C=P⊕X로 복호화할 수 있음
- 만약 송신자와 수신자가 평문 길이만큼의 스트림을 매번 공유할 수 있다면, 스트림을 모르는 공격자는 암호문을 복호화할 수 없음
- 하지만 평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면, 스트림을 공유하는 채널로 평문을 공유하면 되므로 암호화가 필요하지 않은 환경임을 의미함
- 즉, 스트림을 '매번' 안전하게 공유할 수 있다면 그 채널은 외부 공격으로부터 안전하다는 의미로 수신자와 송신자가 안전하게 키를 주고받을 수 있게 됨
- 그 채널에서 키를 주고 받는 것이 아닌, 평문 내용을 서로 주고 받으면 훨씬 안전하고, 생산적이고, 경제적일 수 있다는 의미임.
- but, 안전한 채널은 일반 채널에 비해 훨씬 더 느리고 복잡하기 때문에 이를 사용할 경우 평문을 주고받는 과정에서 필요 이상으로 리소스를 많이 사용하게 될 수 있음 → 시드가 등장하게 된 이유
- 일반적으로 송신자와 수신자는 스트림을 고유하는 대신, 시드(Seed)라고 불리는 작은 값을 공유하고, 이를 사전에 합의된 함수의 인자로 넣어 스트림을 각자 생성함
- 스트림 암호는 단순한 연산으로만 구현되므로 속도가 매우 빠름
- 그러나 블록암호보다는 안전하지 못하다고 알려져 연산 능력이 부족한 임베디드 기기나 속도가 중요한 환경에서만 제한적으로 사용됨
3.3 대칭키 암호 시스템의 장점과 단점
- 대칭키 암호 시스템은 일반적으로 공개키 암호 시스템에 비해 속도가 빠름
- 그러나 송신자와 수신자가 사전에 키를 교환해야 한다는 제약이 존재
- 또한 대칭키 암호 시스템에서는 그룹 내에 여러 명이 있을 경우 두 사람마다 서로 다른 키를 생성해서 사용해야 함
- 즉, N명의 사람이 있을 때 총 N(N-1)/2 개의 키가 필요함
- 이후에도 새로운 상대와 통신할 때마다 계속 키를 생성해야 함
- 공개키 암호 시스템에는 이와 같은 키 생성의 불편함이 없음
6. 공개키 암호 시스템
- 공개키 암호 시스템에서 송신자는 수신자의 공개키(Public Key)로 데이터를 암호화하여 수신자에게 전송하고, 수신자는 자신의 비밀키(Private Key)로 이를 복호화 함
- 명칭에서 알 수 있듯 공개키는 모두에게 공개되어 있으므로 공개키를 아는 사람은 누구나 수신자에게 암호문을 보낼 수 있음
- 그러나 개인키는 수신자만 알고 있으므로, 공격자는 암호문을 도청해도 이를 복호화할 수 없음
- 공개키 암호 시스템은 우체통에 비유할 수 있음
- 누구나 수신자의 우체통으로 편지를 보낼 수 있지만, 편지를 꺼내서 볼 수 있는 사람은 열쇠를 가지고 있는 수신자 뿐임
7. 공개키 암호 시스템의 장점과 단점
- 공개키 암호 시스템에서 그룹 내의 사람들이 각자의 공개키와 비밀키를 만든 후 공개키만 공개하면 되므로 N명의 사람이 있을 때 2N개의 키만 필요함
- 이는 N(N-1)/2개의 키가 필요했던 대칭키 암호 시스템보다 훨씬 적음
- 또한 한 번 키를 생성하고 나면, 새로운 상대와 통신하더라도 자신의 키를 다시 만들어야 할 필요가 없음
- 반면, 공개키 암호 시스템은 일반적으로 대칭키 암호 시스템에 비해 다소 복잡한 연산이 필요하므로 속도가 느림
- 또한, 대칭키 암호화 같은 안전성을 제공하려면, 대칭키 암호보다 긴 키를 사용해야 함
- 예를 들어 대칭키 암호 시스템인 AES는 192 비트 이상의 키를 사용하면 충분히 안전하지만, 공개키 암호 시스템인 RSA는 2048 비트 이상의 키를 사용할 것이 권장됨
8. 암호의 기능
① 기밀성(Confidentiality): 기밀성은 허락된 사람만이 정보를 열람할 수 있게 하는 기능을 의미하며 여기서 허락된 사람은 일반적으로 키를 가지고 있는 사람을 말함
② 무결성(Integrity): 무결성은 송신자가 보낸 정보에 변조가 일어나지 않았음을 의미함. 예를 들어, 송신자가 데이터를 보내는데, 누군가가 이를 가로채어 조작하고, 수신자에게 전달할 수 있음. 또는 네트워크 상의 문제로 이 중 일부가 변경될 수도 있음. 무결성은 이러한 데이터의 변화가 발생하지 않았음을 보증하는 기능임
③ 인증(Authentication): 인증은 정보를 주고 받는 상대방의 신원을 확인하는 기능을 말함. 대표적인 예로는 공인인증서가 있으며 웹에서 아이디와 비밀번호를 입력하는 것도 인증의 영역에 속함
④ 부인 방지(Non-repudiation): 부인 방지는 정보를 교환한 이후에 교환한 사실을 부인할 수 없게 하는 기능임. 온라인 상에서 거래가 발생했을 때 돈을 수신한 쪽에서 수신한 사실을 부인할 수 있다면 온라인 거래는 불가능할 것임
# 마치며
- 키워드
- 혼돈(Confusion): 암호문으로부터 평문의 정보를 유추하지 못하게하는 성질
- 확산(Diffusion): 평문의 작은 변화가 암호문의 큰 변화로 나타나게 하는 성질
- 대칭키 암호 시스템(Symmetric Cryptosystem): 수신자와 송신자가 같은 키를 공유하여 정보를 암호화하고 복호화하는 시스템. 속도가 빠르지만, 키 교환이 어렵다는 단점이 있음
- 블록 암호(Block Cipher): 평문을 일정 크기의 블록으로 나누고, 각 블록을 암호화하는 대칭키 암호 방식
- 스트림 암호(Stream Cihper): 수시자와 송신자가 공유하는 스트림을 이용하여 데이터를 암호화하는 방식. 속도는 빠르지만, 블록 암호보다 안전하지 않다고 알려져 있음. 일반적으로 성능이 부족한 임베디드 장비나 빠른 속도가 필요한 제한적 환경에서 사용됨
- 공개키 암호 시스템(Public-Key Cryptosystem): 수신자와 송신자가 서로 다른 키를 사용하여 정보를 암호화하고 복호화하는 시스템. 암호화와 복호화에 사용되는 키가 다름. 사용되는 전체 키의 수는 적으나, 대칭키 암호보다 속도가 느림.
- 현대 암호의 네 가지 기능: 기밀성(Confidentiality), 무결성(Integrity), 인증(Authentication), 부인 방지(Non-repudiation)
# Quiz
'Hacking Tech > Crypto' 카테고리의 다른 글
[Dreamhack] 고전 암호 (2) | 2022.12.26 |
---|---|
[Dreamhack] Cryptography Introduction (0) | 2022.12.24 |