안전한 암호 시스템을 구축하기 위해서는 누군가 암호문을 보았을 때 원본 메시지와 키 정보를 알 수 없어야 한다. 이렇게 원본 메시지와 키 정보를 감추는 과정을 다른 말로 '혼돈과 확산' 이라고 한다.
혼돈(Confusion)은 암호문에서 키를 알아내기 어렵게 하는 성질이고 확산(Diffusion)은 암호문에서 원본 메시지를 알아내기 어렵게 하는 성질이다. 현대의 '통신'을 수학으로 모델링하고 안전한 통신 개념을 처음으로 정립한 클로드 섀넌(Claude Elwood Shannon) 은 혼돈과 확산을 암호 시스템의 안전성을 확보하려면 꼭 달성해야 하는 목표로 정했다. 이 두 가지 성질이 있어야 비로소 안전한 암호 시스템이라고 말할 수 있는 것이다.
보통 혼돈을 달성하는 여러 방법 중에서 Substitution(치환)을 선택하고, 확산을 달성하는 방법 중 하나로 Permutation(전치)을 선택한다. Substitution 해서 혼돈 상태를 달성하고, Permutation 해서 확산 상태를 달성하는 것이 하나의 기초적인 암호화 방식이다.
Substitution cipher(치환 암호)
- 치환 암호는 비트, 문자 또는 문자의 블록을 다른 비트, 문자 또는 블록으로 대체하는 것인데 쉽게 말하면 어떤 문자를 다른 문자로 바꾸는 것이다.
- 즉, 평문의 문자를 다른 문자로 교환하는 규칙이다. 이 때 교환 규칙은 1 : 1 대응이 아니어도 된다.
- 원본 메시지의 각 부분을 다른 기호나 알파벳으로 많이 바꿀수록 메시지는 혼돈 상태에 가까워진다.
- 치환 암호의 엄밀한 의미는 평문에서 사용하는 문자의 집합과 암호문에서 사용하는 집합이 다를 수 있다는 점이다.
Transposition cipher / Permutation cipher (전치 암호)
- 전치 암호는 다른 문서로 대체하지 않지만 원문을 여기저기 움직이게 한다. 즉, 문장 안에서 문자 순서를 바꾸는 작용이다.
- 비트, 문자 또는 블록이 원래 의미를 감추도록 재배열한다.
- 문자 순서를 많이 바꿀수록 원본 메시지는 바꾼 메시지의 여기저기에 분산되는데 이것이 확산 상태이다.
- 전치는 평문에서 사용하는 문자의 집합과 암호문에서 사용하는 문자의 집합이 동일하다.
- 따라서 전치 암호란 문자 집합 내부에서 자리를 바꾸는 규칙이고 평문에 사용된 문자와 암호문에 사용된 문자가 1 : 1 대응 규칙을 갖는다는 특성이 있다.
Substitution 과 Permutation 을 한 번 수행하는 기본 단위를 SPN (substitution-permutation network) 이라고 한다. 한 번 문자를 바꾸고 순서를 섞으면 'SPN 1 round' 이다. 암호문은 SPN 을 여러 번 반복할수록 안전하다.
암호화와 복호화 때 같은 키를 사용하는 대칭키 암호화 방식에서, 데이터를 다루는 단위에 따라 블록 암호와 스트림 암호로 나눌 수 있다.
Block cipher (블록 암호)
위에서 언급한 SPN 을 반복해서 구성하는 알고리즘은 보통 특정한 크기 단위로 데이터를 처리한다. 이 특정한 덩어리 데이터를 '블록' 이라고 한다. 블록 암호는 round 를 사용하여 반복적으로 암호화 과정을 수행하는데, 각 블록마다 특정한 고정 길이로 나눈 후 key 값을 이용하여 암호화한다. 블록 암호 방식을 사용하는 암호 알고리즘은 DES, 3DES, AES 등이 있다.
블록 크기는 알고리즘에 따라 다양하다. 예를 들어 DES 는 64비트 단위로 데이터를 처리하는 암호화 알고리즘이기 때문에 블록의 크기는 64비트이다. 이 비트의 수를 블록 길이라고 하는데, 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운영 모드가 사용된다. 이 운용모드에는 ECB, CBC, OFB, CFB, CTR 등이 존재한다.
Stream cipher (스트림 암호)
스트림 암호는 데이터의 흐름을 순차적으로 (보통 1비트씩) 평문과 키 스트림을 XOR 연산하여 암호화한다. 평문을 이진수로 나타내어 (ex. 00100111010) 이진수로 되어 있는 키 값과 XOR 해서 암호문을 만든다. 블록 암호화 방식보다는 빠르지만 암호화 강도는 약하다. 실시간성이 중요하게 생각되는 음성 또는 영상 스트리밍 전송 및 무선 암호화 방식에 사용되었다.
사실 스트림 암호화는 많이 사용하지 않아서 현재는 개념만 남아있는 상태이다. RC4 같은 스트림 암호화 전용 알고리즘도 있긴 하지만, 블록 암호화와 비교하면 연구가 그리 활발하지는 않았다. 운영 모드를 사용하면 블록 암호화를 스트림 암호화처럼 구성할 수 있어 스트림 암호화 전용 알고리즘의 활용도가 낮았기 때문이다.
스트림 암호화의 장점은 패딩을 하지 않아도 (블록 암호화에서는 해줘야 함) 된다는 것이다. 블록 단위로 암호화를 할 때는 다른 블록과 크기가 다른 소위 자투리 블록에 데이터를 더해 크기를 맞추는 작업을 해야 한다. 이를 데이터 패딩이라고 하는데, 데이터 패딩을 하면 원문보다 암호문의 크기가 늘어날 수 있어 암호화 전후 데이터 길이 변화가 문제가 되는 환경에서는 단점이 된다.
또 다른 장점은 XOR 연산을 사용하므로 복호화 알고리즘을 따로 만들지 않는다는 것이다. 암호화 알고리즘 하나로 암호화와 복호화를 모두 수행하므로 구현과 적용이 간편하다.
간단 표 정리
구분 | 블록 암호 | 스트림 암호 |
장점 | 높은 확산, 기밀성, 해시함수 등 다양 | 암호 속도가 빠름, 에러 전파현상 없음 |
단점 | 암호 속도가 느림, 에러 전파 현상 있음 | 낮은 확안, 부당한 삽입과 변형이 쉬움 |
단위 | 블록 | 비트 |
사례 | DES, AES, IDEA, SEED, RC5 | LFSR, MUX generator |
대상 | 일반 데이터 전송, storage 저장 | 음성, 오디오/비디오 스트리밍, 군사 및 외교용 |
참고 :
더북(TheBook): 인크립션: 실용주의 암호화
thebook.io
Block cipher - Wikipedia
Type of cipher In cryptography, a block cipher is a deterministic algorithm operating on fixed-length groups of bits, called blocks. They are specified elementary components in the design of many cryptographic protocols and are widely used to encrypt large
en.wikipedia.org
Stream cipher - Wikipedia
From Wikipedia, the free encyclopedia Jump to navigation Jump to search Type of symmetric key cipher The operation of the keystream generator in A5/1, an LFSR-based stream cipher used to encrypt mobile phone conversations. A stream cipher is a symmetric ke
en.wikipedia.org
암호기법의 분류
치환 암호와 전치 암호 (가) 치환 암호(대치 암호, substitution cipher) 1. 비트, 문자 또는 문자의 블록을 다른 비트, 문자 또는 블록으로 대체함 2. 치환 암호의 엄밀한 의미는 평문에서 사용하는 문자
webstone.tistory.com
'TIL' 카테고리의 다른 글
Checked Exception vs Unchecked Exception (22.11.03 TIL) (0) | 2022.11.03 |
---|---|
해시 함수란 (22.11.02 TIL) (1) | 2022.11.02 |
토큰 기반 인증 (22.10.31 TIL) (0) | 2022.10.31 |
Spring - @Bean, @Component (22.10.30 TIL) (0) | 2022.10.30 |
JAVA Stream (스트림) (22.10.29 TIL) (0) | 2022.10.29 |
댓글