Cryptography(암호학) - 현대암호
현대 암호는 안정성을 갖춘 암호화를 하기 위해 혼돈, 확산이라는 성질을 가져야한다.
혼돈은 암호문에서 평문이 특성을 알아내기 힘들다는 성질이고, 확산은 평문의 작은변화가 암호문에서는 큰 변화로 이어진다는 성질이다.
현대에는 대칭키 암호 시스템 즉 암호화, 복호화할때 사용하는 키가 같은 암호시스템이랑 키가 서로 다른 비대칭키(공개키) 암호 시스템이 있다.
1. 대칭키 암호 시스템
대표적으로 블록암호, 스트림 암호가 있다.
블록 암호는 정해진 블록 단위로 암호화 하는 것이다.
만약 블로의 크기가 4바이트라면 평문도 4바이트로 쪼개서 암호화를 진행 해야한다.
스트림 암호란 송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문에 XOR하는 암호이다.
스트림 암호는 아래와 같이 암호화 할 수 있다.
C(암호문) = P(평문) ⊕ X(데이터 스트림)
이를 X ⊕ X = 0을 이용하여 아래의 식으로 복호화 할 수 있다.
C ⊕ X = P ⊕ X ⊕ X = P
송신자와 수신자는 스트림을 직접 공유하지 않고 Seed라는 값을 공유하여, 사전에 합의한 함수에 인자로 넣어서 스트림을 생성한다.
스트림 암호는 속도는 매우 빠르지만, 블록암호 보다 안전하지 않아서 속도가 중요한 환경에서만 주로 사용한다.
대칭키 암호는 공개키보다 빠르지만, 사전에 키를 주고 받아야하는 제약이 있고, 여러명이면 쌍 마다 키를 생성해야하는 불편함이 있다.
2. 공개키 암호 시스템
공개키 암호 시스템에서는 송신자가 암호를 공개키로 암호화하여 보내면, 수신자가 암호문을 개인키로 복호화 할 수 있는것이다.
공개키는 누구나 알 수 있기 때문에 암호화를 하여 보낼 수 있지만, 복호화는 오직 개인키를 가지고 있는 수신자만 가능하다.
따라서 공격자가 암호문을 도청해도 복호화를 못한다.
공개키는 여러명이면 대칭키 암호처럼 키를 많이 만들 필요가 없고, 새로운 상대와 통신해도 자신의 키를 다시 만들 필요는 없지만, 대칭키보다 느리고, 대칭키 암호보다 더 긴 키를 사용해야한다는 단점이 있다.