본문 바로가기

암호학

[암호학] 키 관리와 해쉬 함수

열쇠

우리가 앞에서 알아봤듯이 키(key)는 암호화에 있어서 필수적이다.

 

그렇기때문에 키를 관리하는 것이 보안에 있어서 중요한 문제가 된다.

 

키의 생성, 분배, 갱신, 취소, 폐기 이외에도 키의 공유, 설치, 저장, 복구 등이 키 관리에 포함이 되고,

 

이러한 키 관리를 통해 키 또는 관련 정보들을 안전하게 유지하여야 한다.

 

키의 분류

세션키

키 버리기

메시지의 기밀성 또는 무결성을 유지하기 위해 비밀키 암호를 통한 암호화에 사용되는 키이다.

 

쉽게 말해 통신중에만 쓰이고 세션이 끝나면 키를 버리는(폐기하는)것이다.

 

사용기간이 매우 짧고, 상호 간에 키를 갱신해야 하는 절차가 필요하다.

 

 

키-암호화 키

 

세션이 오래되어 세션키를 갱신해야 할 때 새로운 세션키가 필요하다. 하지만 이를 평문으로 전한다면 위험하다.

 

그래서 이 새로운 세션키를 암호화해 주는 키를 키-암호화 키라고 한다.

 

마스터키

다른 유형 키들을 보호할 수 있는 키이다.

 

이 키는 수작업으로 분배되며, 초기화되는 절차상의 보호를 받는다.

 

해시 함수

해시 함수란?

임의 비트열을 입력받아 고정된 짧은 길이의 비트열을 출력하는 함수이다.

 

이 해시함수의 가장 큰 특징은 단방향함수라는 것이다.

 

어떤 평문을 함수에 넣으면 해시값이 나오지만 그 해시값을 다시 평문으로 되돌리는 것이 불가능하다는 것이다.(쉽게 말해

암호화는 되지만 복호화가 안됨)

 

해시함수는 큰 비트열을 고정된 짧은 길이로 출력하기 때문에 다른 메시지가 같은 해시값을 가지는 충돌을 피할 수 없다.

 

키의 사용유무에 따라 구분한다.

 

키를 갖는 해시함수

MAC(Message Authentication Code) 알고리즘

MAC

메시지와 비밀키를 입력받아 MAC으로 불리는 해시값을 생산하는 알고리즘이다.

 

비밀키를 아는 지정된 수신자만 동일한 해시 값을 생성하도록 하여 데이터 무결성발신자 인증 기능을 제공한다.

 


암호화 과정

1. 해시 함수를 돌릴 파일이나 메시지를 블록단위로 쪼갠다.

 

2. 초기값과 첫 번째 메시지 블록을 압축 함수를 넣어 돌린다.

 

3. 그 결과와 두 번째 메시지 블록을 압축 함수에 넣어 돌린다.

 

4. 이를 계속 반복한다.

블록은 일정한 단위로(64,128...) 쪼개지는데 만약 나누어 떨어지지 않는다면
패딩이라는 작업을 통해 깔끔하게 쪼개지도록 한다.

 


 

이러한 원리 덕분에 큰 입력값이 오더라도 고정된 해시값을 출력할 수 있다.

 

해시 함수의 종류

SNEFRU

- 1990년에 R.C Merkle에 의해 제안

N-HASH

- 1989년 일본 NTT의 Miyaguchi 등이 발표

MD2, MD4, MD5

-MD5 : 512블록을 입력받아 128 비트의 해시값을 생성함

SHA(Secure Hash Algorithm)

-512블록을 입력받아 160비트의 해시값을 생성한다.

비교 표

 

해시 함수의 응용

해시 함수와 데이터의 무결성

송신자가 데이터를 보낼 때 단방향 해시 함수로 메시지를 요약한 뒤 데이터와 같이 보낸다.

 

이후 수신자가 데이터를 받고, 받은 데이터를 단방향 해시 함수로 새로운 해시 함수를 만들어

 

이들을 비교한다(일치하면 데이터가 변형되지 않은 것이고 다르면 변형된 것이다).

 

 

하지만 이것이 해커들한테서 안전할까?

 

 

데이터를 m이라 하고 해시화된 데이터를 H(m)이라 하자.

 

송신자는 이를 붙여서 보낼 건데( m || H(m) )

 

해커가 데이터를 가로채 m'으로 변형하여 보낸다면( m' || H(m) )

 

이 데이터를 해시화한 H(m')은 H(m)과 다르기 때문에 변형되었다고 판단할 것이다.

 

하지만 해커가 데이터만 수정하는 것이 아니라 요약본도 수정해서 보낸다면( m' || H(m') )

 

컴퓨터는 변형되지 않았다고 판단하게 된다.

 

그래서 이를 보장한 방식이 앞에서 알아본 MAC이다.

 

MAC의 무결성

Among us

 

레드가 원래 메시지에 비밀 키값을 붙여서 요약본을 만든 뒤 보내면

 

블루는 받은 m을 비밀 키를 붙여서 해시화한 뒤 레드에게 받은 요약본과 비교한다.

 

해커는 s값을 모르기 때문에 해커가 변형하기 어려워진다.

 

또한 s 값을 아는 사람은 레드와 블루뿐이니 블루가 메시지를 받으면 자연스럽게 레드가 보낸 것을 알 수 있다.

"Sender authentication"

해시 함수의 문제점

Extension Attack

원본 메시지에 원본의 일부가 아닌 새로운 메시지를 추가하여 보낸다면 해시함수는 이들도 포함하여 해시함수에 넣어 해시값을 만들어낸다.  이를 Length - Extension Attack이라 한다.

 

 

 

만약 해커가 문자와 s를 몰라도 해시값과 메시지 길이만 안다면 새로운 해시 값을 만들어낼 수 있기 때문에 위험한 공격이다.

 

HMAC

이러한 공격을 막기 위해 나온 것이 HMAC이다.

K+ : K 앞에 0을 붙여 특정한 비트수 x로 맞춘 것(SHA -1 에선 x = 512)
ipad : 00110100을 x/8번 반복한 것(대충 키값만큼 맞춘다고 생각하면 됨)
opad : 01011100을  x/8번 반복한 것

 

1. 먼저 K+와 ipad를 XOR 연산해 나온 값을 M에 붙여 해시함수에 집어넣는다.

 

2. K+와 opad를 XOR 연산해 나온 값을 1에서 계산한 값에 붙여 해시함수에 집어넣는다.

 

이렇게 해서 나온 게 HMAC 방식이다. 글로만 보면 어려우니 그림으로 한번 보자.

 

'암호학' 카테고리의 다른 글

[암호학] 정수론  (1) 2024.12.16
[암호학] 암호화 기반 인증기술  (1) 2024.10.30
[암호학] 공개키 암호화 방식  (2) 2024.10.28
[암호학] DES란?  (1) 2024.10.25
[암호학] 대칭키 암호화 방식  (1) 2024.10.22