본문 바로가기
cryptology

단방향 암호화란? MD5 암호화란?

by jinhyuk._.c 2022. 9. 17.

단방향 암호화란? 

단방향 암호화는 대표적으로 인증과정과 신원 증명 과정 그리고 비밀번호에서 사용이 됩니다. 예를 들어 비밀번호를 '1234'라고 하였을때, 이를 암호화하여'03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4' 라는 암호문을 만들어 냅니다. 이런 단방향 암호화의 특징은 복호화가 불가능 하고 어떤 방법을 쓰더라도 암호문을 원래의 평문으로 되돌릴 수 없는 암호화의 방법입니다. 

이런 단방향 암호의 장점으로는 암호문이나 DB 가 노출이 되어도 안전하다는 장점이 있습니다. 하지만 암호문을 생성한 평문을 잊어버릴경우 찾기가 불가능 합니다. 그래서 많이 사용되는 곳이 비밀번호 사용시에 사용이 되는데 유저가 비밀번호를 잃어버렸을 때는 비밀번호 변경을 하게 됩니다. 이럴경우 메일 인증이나 SMS 인증을 통해 새로운 비밀번호를 변경하게 됩니다. 그리고 단반향 암호는 암호문이 평문이 조금이라도 다르면 완전 다를 암호문이 생성되기 때문에 데이터가 변조 되지 않았을을 나타낼때 사용하기도 합니다.

 

단방향 암호의 종류

- MD5

- SHA-1

- SHA-2(SHA256)

 

단방향 암호화의 종류중 한예로 MD5에대해 알아보겠습니다.

 

MD5란?

MD5(Message-Digest algorithm 5)는 임의의 메세지를 입력받아 128비트 암호화값을 출력하는 해시 함수입니다. 입력길이에는 제한이 없습니다. 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성검사 등에서 사용이 됩니다. 1996년에 MD5의 설계상 결함이 발견되었다. 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1과 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작하였습니다. 2004년에는 더욱 심한 결함이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표되기도 하였습니다. 현재는 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있고  2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되었습니다. 즉 결함이 많이 발견되어 많이 사용하지 않는 것을 권장한다고 합니다.

 

MD5의 원리

MD5는 임의의 길이의 메시지를 입력받아서 128비트짜리 고정 길이의 값을 출력합니다. 입력 메시지는 512비트 블록들로 쪼개지는데 패딩을 사용하여 512로 나누어 떨어지게 합니다 padding은 블록암호 운용모드에서 설명했었는데, MD5의 경우 512비트 단위로 연산을 하기 때문에 패딩이 필요합니다. 패딩조건은 다음과 같습니다.

input = data

bit = 1

bit! ~ = 0

나머지 64bit = data length(little endian)

MD5패딩 조건

확장된 데이터는 512비트 단위로 나누어서 입력됩니다.

A,B,C,D로 이름을 붙인 32비트 워드 버퍼 네개로 이루어진 하나의 128비트 스테이트(state)에 대해 동작합니다

A,B,C,D는 상수값으로 초기화를 합니다. MD5는 리틀 엔디언 방식으로 구현을 해야하는 알고리즘입니다.

A
0x01234567
B
0x89abcdef
C
0xfedcba98
D
0x76543210

512비트의 블록을 처리하기 위해 4개의 부울함수로 구성된 함수를 사용합니다. 해당 함수를 거치면 4개의 32비트 워드가 32비트로 출력되게 됩니다.

 

MD5함수

+, ^ , v , ㄱ (모양비슷한걸로 이해해주세요...) 표시는 XOR, AND, OR, NOT 연산을 의미합니다. C언어 define으로 표현하면 다음과 같습니다. (제가 C가 익숙하여 C로 표현하였습니다,)

 

#define F(x, y, z) ((x & y) | (~x & z))

#define G(x, y, z) ((x & z) | (y & ~z))

#define H(x, y, z) (x ^ y ^ z)

#define I(x, y, z) (y ^ (x | ~z))

 

MD5 암호화 그림

1. A, B, C, D는 앞서 말한 초기화된 상수값으로 시작됩니다

2, 하나의 메시지 블록(512bit)을 처리하는 것은 총 4라운드(128bit 씩처리)로 구성되어 수행됩니다.
각 라운드는 비선형함수 F(F, G, H, I 순으로), 모듈로 덧셈, 레프트 로테이션에 기반한 16개의 동일연산으로 이루어집니다.

​3.  Mi 는 입력 메시지의 i번째 32bit 블록을 의미하고, Ki는 4294967296 * abs(sin(i)) 의 정수부분입니다. (i는 라디안, 0<= i <= 63) (abs는 절대값)

4. K값은 미리 계산이 가능하기 때문에 메모리가 여유 있으면 속도를 위해서 미리 계산한 값을 사용하기도 한다.

5. <<<s 는 s만큼의 레프트 로테이션 입니다.

<-  표시는 알고리즘 모듈로 2^32 덧셈(덧셈 후 mod 2^32 )하는 연산모듈입니다.

 

이상으로 MD5 에 대한 설명을 마치도록 하겠습니다.

 

 

참고 K 값 표입니다.

K [0 .. 3] : = {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee}

K [4 .. 7] : = {0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501}

K [8..11] : = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be}

K [12..15] : = {0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821}

K [16..19] : = {0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa}

K [20..23] : = {0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8}

K [24..27] : = {0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed}

K [28..31] : = {0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a}

K [32..35] : = {0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c}

K [36..39] : = {0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70}

K [40..43] : = {0x289b7ec6, 0xea127fa, 0xd4ef3085, 0x04881d05}

K [44..47] : = {0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665}

K [48..51] : = {0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039}

K [52..55] : = {0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1}

K [56..59] : = {0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1}

K [60..63] : = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391}

반응형

'cryptology' 카테고리의 다른 글

공인인증서 및 공동인증서 로그인의 원리  (0) 2022.10.11
Hash 란? hash 암호화란?  (0) 2022.09.17
양자암호란?  (0) 2022.09.13
전자서명이란?  (0) 2022.09.13
ECC 암호화란? 타원곡선 암호란?  (0) 2022.09.11

댓글