프롤로그
이제 암호학 본격적으로 들어가보자
대칭키 암호
대칭키 암호란 암호화에 사용되는 암호키와 복호화에 사용되는 암호키가 동일한 암호화 기법을 말한다.
대칭키 암호 방식으로 암호화한 정보를 누군가에게 보낼 때 암호키도 함께 보내야 하는데, 암호키 자체는 암호화가 되지 않은 평문이다. 이 과정에서 암호키를 분실하거나 타인에게 노출되면 이 암호키로 암호화한 정보는 보안에 매우 취약해진다.
그래서 이 대칭키 암호의 최대약점은 암호키를 관리하고 전달하는 메커니즘이다.
대칭키 암호 원리
대칭키 암호는 이진수의 비트간 배타적 논리합(XOR) 연산에 기반한다.
원래의 정보에 암호키와 비트간 XOR 연산을 하여 암호화된 정보를 반드는 것이고, 암호화된 정보에 암호키를 비트간 XOR연산을 하여 원래 정보로 복호화한다.
단순히 XOR 연산만으로는 암호회된 정보가 쉽게 풀리기 때문에 실제로 활용되는 대칭키 암호에는 XOR 연산 이외에 다른 여러가지 수학 연산을 같이 사용한다.
대칭키 암호화 방식은 데이터를 변환하는 방식에 다라 블록암호(Block Cipher)와 스트림 암호(Stream Cipher)로 나뉜다.
블록 암호
블록암호는 고정된 크기의 블록 단위로 암호화, 복호화 연산을 수행하는 대칭키 암호이며, 암호키 크기에 따라 64~256비트 블록 크기로 연산을 수행한다.
대표적으로 DES, 3DES, AES, Blowfish, Twofish 등이 있고, 우리나라에서 개발한 블록암호는 SEED, ARIA, HIGHT 등이 있다.
국내 개발 블록 암호들 같은 경우
https://seed.kisa.or.kr/kisa/reference/EgovSource.do
여기서 코드를 사용할 수도 있다.
블록 암호 알고리즘은 암호화 할 때 적용되는 방식에 따라 파이스텔(Feistel) 블록 주조와 SPN(Substitution-Permutation Network) 블록 구조로 나뉜다.
파이스텔같은 경우는 평문 블록을 좌우 두개 블록으로 분할하고, 이것저것 하는 건데
DES, Blowfish, Twofish, SEED 등이 있다.
SPN 블록 구조는 분할하지 않고 전체 블록을 적용하는 방식으로, 라운드 함수의 역함수를 구해야하는 어려움이 있는 구조지만 현재 기술로는 충분하다. IDEA, SHARK, ARIA, AES 등이 있다.
운영모드로써 ECB, CBC 모드 등이 있는데, 운영모드는 암호화 대상 정보가 블록 크기보다 큰 경우 각 블록에 대해 어떤 방식으로 암호화를 수행하는지가 있는데, 그냥 넘어가겠다.
스트림 암호
이진화된 평문 스트림과 이진 키 스트림을 비트 단위로 XOR 연산하여 암호문을 생성하는 방식이다. 스트림 암호는 이를 위한 하드웨어 구현이 간편하고 속도가 빠르다는 점 때문에 무선통신 환경에서 무선 데이터 보호에 주로 사용된다.
RC4, A5/1, A5/2, A5/3(GSM 무선통신 보안을 위한 표준)이 있다.
Pycryptodome 설치하기
Pycrypto(Python Crytography Toolkit ) 은 SHA256 과 같은 해시함수와 AES, DES, RSA 등과 같은 다양한 암호 알고리즘을 제공하는 파이썬 패키지 이다. Pycrypto를 대체한 새로운 패키지가 Pycryptodome 이다.
pip install pycryptodome
이렇게 설치를 할 수 있고, 설치됐는지 확인하려면
import Crypto
입력해보자.
이러면 잘 설치된 거다.
에필로그
다음장에 이제 3DES 로 구현해보자.
'보안 스터디 > 암호학' 카테고리의 다른 글
[암호학] 암호화 해킹 #6 (AES 및 구현) (0) | 2024.01.18 |
---|---|
[암호학] 암호화 해킹 #5 (3DES 및 구현) (1) | 2024.01.18 |
[암호학] 암호화 해킹 #3 (전치 암호 도구 만들기) (5) | 2024.01.14 |
[암호학] 암호화 해킹 #2 (카이사르 암호 도구 만들기) (2) | 2024.01.13 |
[암호학] 암호화 해킹 #1 (간단한 암호 도구 만들기 -1) (3) | 2024.01.09 |