본문 바로가기
about Security/암호

[현대암호기초] #01. 암호화 + 고전암호

by saniii 2020. 10. 11.

# 암호화 #

암호화 : 어떠한 자료를 이해할 수 없는 형태로 만들어서 그 자료의 기밀성(confidentiality)를 보장한다.

 

암호화를 위해서는 알고리즘과 비밀 값이 필요한데,

암호화 알고리즘 = 암호, Cipher

암호화에 쓰이는 비밀 값 = key

 

-> 비밀키를 모르면 누구도 암호화된 메시지에서 어떤 정보를 알아낼 수 없다.

 

암호화되지 않은 메시지를 평문 (plain text),

암호화된 메시지를 암호문 (cipher text),

 

평문과 키를 암호화 함수에 입력하여 암호문을 만들고

암호문과 키를 복호화 함수에 입력하여 평문을 얻는다.

 

★ 암호문은 평문과 길이가 같거나 더 길다.

         하지만 평문보다 짧은 길이의 암호문은 없다

 

 

# 고전 암호 #

고전암호: 컴퓨터가 쓰이기 전, 비트가 아닌 문자를 다루는 암호

 

+ 시저 암호 (=카이사르 암호) /,Caesar cipher

: 메시지의 각 글자를 알파벳 순서에서 3자리 뒤로 순환 이동한 글자로 대체한다.

(만약 Z라면 C가 된다.)

ex) CAESAR -> FDHVDU

매우 쉬워서 암호화기능을 한다고 보기 어렵다.

만일 순환이동할 자리수를 임의의 수로 바꾼다 하더라도 시간이 조금 더 걸릴 뿐 사람의 힘으로 풀어낼 수 있다.

 

+ 비즈네르 암호 / Vigenere cipher

: 키로 정의된 값만큼 각 글자를 이동한다.

비즈네르의 key는 일련의 글자들로 이루어져 있고 각 글자는 알파벳 위치에 따라 특정한 수를 나타낸다. 예를 들어 키가 ABC라면 평문의 글자를 0자리, 1자리, 2자리 0자리, 1자리, ... 이동한다.

비즈네르가 시저보다는 안전하지만 여전히 취약하다.

 

+ 비즈네르 해독하기 1 : 키의 길이 알아내기

암호문에서 반복되는 글자가 있는지 확인하고 이 단어들 사이의 글자 수를 통하여 키의 길이를 추론한다.

ex) THEYDRINKTHETEA 라는 문장을 키 DUH를 이용하여 암호화한

암호문 WBLBXYLHRWBLWYH

이때 WBL이 반복하여 두 번 나타나는데 이 단어 사이의 글자 수가 9글자이므로

키가 9의 약수 중 하나일 것으로 추론할 수 있다

 

+ 비즈네르 해독하기 2 : 도수분석(frequency analysis)

도수분석=빈도분석

언어에서 글자들의 분포가 고르지 않다는 점을 활용하여 실제 키를 추론한다.

영어에서 가장 흔히 쓰이는 문자 (ex: a, e, ...)는 암호문에 나오는 문자일 것임을 이용한다

 

 

# 암호의 작동방식

암호는 두 개의 구성요소로 이루어지는데 바로 치환 permutation’운영모드 mode of operation’이다.

 

* 치환 permutation: 주어진 한 항목을 변환하는 함수

각 치환에 고유한 역원이 존재한다는 전제조건이 붙는다.

안전한 암호를 위해서는 치환이 다음 세 조건을 만족해야 한다.

+ 치환은 반드시 키로 결정되어야 한다.

: 키의 비밀을 유지하는 한, 치환의 비밀도 유지할 수 있다.

+ 키가 다르면 치환도 달라야 한다.

서로 다른 키가 동일한 치환을 가지면 암호문을 풀기 위해 시도할 경우의 수가 줄어든다.

+ 치환은 (넓은 의미에서) 무작위성을 가진다.

: 어떠한 패턴이 보이면 공격자가 치환을 예측할 수 있다.

 

-> 이 세조건을 모두 만족하는 치환을 안전한 치환(secure permutation = 보안 치환)이라 한다.

 

* 운영모드 mode of operation: 치환을 이용해서 임의의 길이의 메시지를 처리하는데 쓰이는 알고리즘

한 암호의 운영모드는 중복 문자들에 대해 서로 다른 치환을 적용함으로 평문의 중복 글자 패텬이 드러나는 문제를 완화한다.

 

 

 

= 안전한 암호를 구축하려면 안전한 치환과 안전한 모드를 조합하야 한다.

= 공격자는 메시지의 길이말고 아무 정보도 알아낼 수 없다.

 

# 안전한 암호

고전 암호는 사람이 할 수 있는 암산, 연산들로 한정되기 때문에 필연적으로 안전하지 않다.

암호가 안전하려면 치환 연산이 무작위해야 하며 실제로 무작위하게 만드는게 제일 좋다

 

단순한 연산을 사용함에도 안전한 치환을 얻기

: 테이블로 표현된 무작위 치환을 매번 선택하고 그 테이블을 참조하여 대입을 수행한다

단점 : 서술이 길어짐

 

짧은 서술을 가지지만 안전한 치환

: 복잡한 연산을 사용하기

 

 

 

댓글