ARCHIVES

PostgreSQL에서 사용하는 암호화 방식

(주)비트나인 2015. 9. 22. 16:35



이번 포스팅에서는 PostgreSQL에서 사용하는 MD5 암호화 방식과 Salt 암호화에 대해 간단히 포스팅 해보겠습니다.





암호화 (Enctyption) 란?


깊이 들어가면 한없이 깊어지므로 간단히 다음과 같다고 볼 수 있습니다. "특별한 지식을 소유한 사람들을 제외하고는 누구든지 읽어볼 수 없도록 알고리즘을 이용하여 정보를 전달하는 과정이다." 라고 위키피디아에서 명시 하고 있습니다. 

(http://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%99%94) 다시 말하면 내가 원하는 대상에게만 볼 수 있도록 정보를 언어학적 방법과 수학적 방법으로 변경 시켜서 보내는 것이라고 볼 수 있습니다.





MD5 (Message-Digest algorithm 5) 란?


128비트 암호화 해시 함수입니다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했습니다. MD5는 1996년에 설계상 결함이 발견되었습니다. 치명적 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같은 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했습니다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표 되었습니다.



MD5 Algorithm

MD5는 임의의 길이의 메시지를 받아서 128비트의 고정 길이의 출력 값으로 변경 시킵니다. 과정을 간단히 말하면 다음과 같습니다.


1. 입력 메시지는 512비트 블록들로 쪼개지고, 나머지는 패딩으로 512로 나누어 떨어질 수 있는 길이      가 되게 합니다.

2. 32비트 워드로 이루어진 하나의 128비트 스테이트로 512비트 입력 메시지를 해쉬합니다.



해쉬 연산에는 모듈라 덧셈, 레프트 로테이션 비선형 함수 F에 기반합니다.

비선형 함수 F는 4가지 입니다. (입력 인자 XYZ에 대한 이해는 http://ko.wikipedia.org/wiki/MD5 의 그림을 참조)

1. F(X, Y, Z) = (XY)(¬XZ)

2. G(X, Y, Z) = (XZ)(Y¬Z)

3. H(X, Y, Z) = X XOR Y XOR Z

4. I(X, Y, Z) = Y XOR (X¬Z)

∨ 논리합

∧ 논리곱

¬ = NOT



MD5값은 현재 http://www.md5decrypt.org/ 사이트에서 해쉬 값만 있다면 복호화가 가능합니다. 궁금하면 테스트 해보시기 바랍니다. 해쉬값만 있다면 복호화도 충분히 가능한데 이러한 MD5의 문제점을 극복하는 방법이 SALT라는 기법입니다.





SALT 란?


salt 암호화 방식은 기존의 md5방식에 random string을 추가하여 md5암호화를 하는 것입니다. 복잡도를 높이기 위해 salt 방식을 N번 해쉬하는 방식이 있습니다.



MD5방식의 복호화 예입니다. 원래 MD5방식은 단방향 암호화 방식으로 복호화가 안되는 방식입니다. 하지만 다양한 문자열들의 해쉬값을 사전으로 가지고 있음으로써 복호화가 가능합니다.



http://www.md5decrypt.org/ 이 사이트 또한 다양한 문자열을 해쉬값으로 가지고 있으면서 복호화합니다. md5 암호화는 openssl로 할 수 있는 방식이 있지만 저자는 pgpool에서 제공하는 md5변경 툴을 사용 하였습니다. 사용 방법은 pg_md5라는 실행 파일에 인자로 변경할 문자열을 넣어 주면 됩니다.

/path/to/pg_md5 test -> (md5 해싱 값)098f6bcd4621d373cade4e832627b4f6



http://www.md5decrypt.org/ 에서 생성한 값과 동일 한 결과를 얻을 수 있습니다..



수박 겉핥기식으로 공부를 해서 완벽히 수식을 이해한 것은 아닙니다. 하지만 간단히 알아볼 수 있는 글이라고 믿습니다.



다음 포스팅에는 다른 암호화 알고리즘에 대해서 알아보고 글을 쓰겠습니다.






Posted by Bitnine(비트나인)