MD5
md5는 암호화 해시 함수의 일종이다.
해시함수(http://sevity.tistory.com/21) 및 암호화해시함수(http://sevity.tistory.com/22)에 대해서는 각각의 링크를 참조해주시기 바랍니다.
다음 그림과 같이 어떤 길이의 인풋이 들어오더라도 128bit의 해시값으로 만들어준다.
인풋의 길이와 상관없이 128비트의 해시값을 생성한다(위의 DFDD등은 16진수로 표기한것이며, 위 샘플은 해시값의 길이가 128비트가 아니어서 정확히 md5 예제는 사실아님에 유의, 위는 계산하면 160비트다 그리고 그렇다면 SHA가 되겠다 ㅎㅎ)
글자하나가 미묘하게 바뀌어도 결과값이 크게 달라지는 난수화 효과가 발생함을 알 수 있다. (이래야 역공학이 힘들다)
MD5의 내부 구현기술은 여기(https://ko.wikipedia.org/wiki/MD5)를 참조하면 되는데,
실제 구현시에는 #include <openssl/md5.h> 등으로 쉽게 라이브러리를 쓸 수 있어서, 학습용이 아니면 반드시 직접 구현할 필요는 없다.
linux 머신에서 다음과 같이 간단한 방법으로 md5 값을 확인할 수 있다.
$ echo -n "sevity" | md5sum
34208682f4f71b1cc3a87bbaad4af709
나중에 새로 나온 SHA에 비해서 보안에 취약하다는 약점이 있다.
SHA
MD5랑 개념적으로는 암호화 해시의 일종이라는 점에서 같고, 어떤 길이의 인풋이 오더라도 160bit의 해시값으로 만들어 준다.
MD5와 마찬가지로 내부 디테일까지 꿰고 있을 필요는 없어보인다.
MD5보다는 좀 더 역상 공격하기 힘들게 설계되어 있다.
미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정
SHA버전별 정보는 위키피디아에서 가져온 아래 표 참조
'비트코인' 카테고리의 다른 글
비트코인 논문 리뷰 (0) | 2021.08.31 |
---|---|
블럭체인의 원리 (0) | 2020.07.31 |
비트코인 분석 연재를 시작하며 (0) | 2017.12.10 |
암호화 해시 함수(cryptographic hash function) (0) | 2017.12.10 |
hash 기초 (0) | 2017.12.10 |