본문 바로가기
Cryptography

현대 암호 (Dreamhack 정리)

by zz! 2024. 9. 10.
728x90

https://dreamhack.io/

 

해커들의 놀이터, Dreamhack

해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향

dreamhack.io

 

송신자와 수신자가 같은 키를 공유해야하는 암호 시스템을 대칭키 암호 시스템(Symmetric key cryptosystem)이라고 부른다.

같은 키를 갖고 있는 특성상, 대칭키 암호 같은 경우는 사전에 서로 키를 공유하는 과정이 반드시 필요하다.

하지만, 현대에는 많은 데이터가 오가는 네트워크는 도청에 매우 취약하므로 키를 평문으로 공유하기는 부적합하다.

그래서 학자들은 외부인이 키가 공유되는 과정을 도청해도, 공유되는 키는 알지 못하게 하는 키 공유 알고리즘(Key exchange algorithm)을 연구하였다.

Diffie와 Hellman이 Diffie-Hellman 키 교환 알고리즘을 제시하였고, 송신자와 수신자가 서로 다른 키를 사용하는 공개키 암호 시스템(Public key cryptosystem)의 개념을 창안했다. 이는 대칭키와 대비되어 비대칭키 암호 시스템(Asymmetric cryptography)이라고 부른다.

 

케르크호프스의 원리 : 키를 제외한 시스템의 다른 모든 내용이 알려지더라도 암호체계는 안전해야 한다.

--> 키 혹은 비밀키 없이는 현대 기술로 복호화가 불가능한 암호 체계의 예시이다.

 

안전한 암호 시스템은 혼돈(Confusion)확산(Diffusion)의 성질을 만족해야한다고 클로드 섀넌이 발표했다.

현대의 많은 암호 시스템이 두 성질을 따르고 있다.

혼돈 : 암호문에서 평문의 특성을 알아내기 힘든 성질을 말한다. ex) 단일 치환 암호를 사용하여 같은 평문을 두번 암호화하면 출력된 두 암호문은 서로 같다. 공격자는 암호문을 보고 평문이 무엇인지 유추하지는 못하더라도 암호문을 생성한 두 평문이 같다는 사실은 알 수 있다. 결론은 단일 치환 암호는 혼돈 성질을 만족하지 못한다.

확산 : 평문의 작은 변화가 암호문의 큰 변화로 이어지는 성질이다.

 

대칭키 암호 시스템

암호화와 복호화에 같은 키를 사용하는 암호 시스템이다. 크게 블록 암호와 스트림 암호로 구분한다.

블록 암호(Block cipher) 평문을 정해진 크기의 블록 단위로 암호화하는 암호이다. ex) 블록의 크기가 4바이트라면 평문을 4바이트 블록으로 쪼개어 각 블록마다 암호화를 진행한다. 대표적인 예시로는 DES 대칭키 암호AES 대칭키 암호가 있다. 

만약 평문의 크기가 블록 크기의 배수가 아니어서 블록으로 균등하게 쪼갤 수 없다면, 평문 뒤에 데이터를 추가하는 패딩(Padding)을 먼저 수행한다. 패딩은 평문이 블록 크기의 배수가 될 때까지 데이터를 추가한다.

스트림 암호(Stream cipher) 송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문과 특정한 연산을 수행하여 암호문을 생성하는 암호이다. 복호화 과정은 암호화 과정의 연산을 역으로 수행한다.

XOR(Exclusive OR) 연산을 사용한다. 

만약 송신자와 수신자가 평문 길이의 스트림을 매번 공유할 수 있다면, 스트림을 모르는 공격자는 암호문을 복호화할 수 없다. 하지만 평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면, 스트림을 공유하는 채널로 평문을 공유하면 되므로 암호화가 필요하지 않은 환경이다. 그래서 일반적으로 송신자와 수신자는 스트림을 공유하는 대신에, 시드 (Seed) 라 불리는 값을 공유하고, 이를 사전에 합의된 함수의 인자로 넣어 스트림을 각자 생성한다. 단순한 연산으로만 구현되므로 속도가 매우 빨라 연산 능력이 부족한 임베디드 기기나 속도가 중요한 환경에서 사용된다.

대칭키 암호 시스템의 장점과 단점

공개키 암호 시스템에 비해 속도가 빠르다. 하지만 송신자와 수신자가 사전에 키를 교환해야 한다는 제약이 있다.

그리고, 대칭키 암호 시스템에서는 그룹 내에 여러 명이 있을 경우 두 사람마다 서로 다른 키를 생성해서 사용해야 한다.

 

공개키 암호 시스템

송신자는 수신자의 공개키(Public Key)로 데이터를 암호화하여 수신자에게 전송하고, 수신자는 자신의 비밀키(Private Key)로 이를 복호화한다. 같은 시스템에서 사용되는 공개키와 비밀키를 키 쌍(Key Pair)이라고 부른다.

공개키는 모두에게 공개되어 있으므로 공개키를 아는 사람은 누구나 수신자에게 암호문을 보낼 수 있다. 

하지만 개인키는 수신자만 알고 있으므로, 공격자는 암호문을 도청을 해도 이를 복호화 할 수 없다.

공개키 암호 시스템의 장점과 단점

그룹 내의 사람들이 각자의 공개키와 비밀키를 만든 후 공개키만 공개하면 된다. 그래서 대칭키 암호 시스템보다 훨씬 적다. 그리고 한 번 키를 생성하고 나면, 새로운 상대와 통신하더라도 자신이 키를 다시 만들어야할 필요가 없다.

공개키 암호 시스템은 일반적으로 대칭키 암호 시스템에 비해 다소 복잡한 연산이 필요하므로 속도가 느리다. 또한 대칭키 암호와 같은 안전성을 제공하려면, 대칭키 암호보다 긴 키를 사용해야 한다.

 

암호의 기능

기밀성(Confidentiality)

허가된 사람만이 정보를 열람할 수 있게 하는 기능을 말한다. 여기서 허락된 사람은 일반적으로 키를 가지고 있는 사람을 말한다.

무결성(Integrity)

송신자가 보낸 정보에 변조가 일어나지 않았음을 의미한다. 데이터의 변화가 발생하지 않았음을 보증하는 기능이다.

인증(Authentication)

정보를 주고 받는 상대방의 신원을 확인하는 기능을 말한다. 

부인방지(Non-repudiation)

정보를 교환한 이후에 교환한 사실을 부인할 수 없게 하는 기능을 의미한다.