본문

Javascript로 구현한 crypt(3)

유닉스의 암호관리에 사용된 해쉬함수로 crypt(3)이 있다. 당연하게 생각하고 있었는데 이번 포스팅으로 뒤의 3이라는 숫자에 대한 궁금증이 생겨 위키피디아를 검색했더니 다음과 같은 내용을 찾을 수 있었다.

유닉스 환경에서 crypt는 유틸리티 프로그램 혹은 C 프로그래밍 함수를 지칭하는 이름이다.  비록 둘다 데이터를 암호화 하는데 사용하지만, 근본적으로 전혀 상관이 없다. 이 둘을 구분하기 위해서 저자들은 유틸리티 프로그램이 Unix 매뉴얼 페이지의 제 1절에 언급이 됨을 들어 이를 지칭하는데 crypt(1)을 사용하며, 마찬가지로 제 3절에 C 라이브러리 함수가 언급이 됨을 들어 이를 crypt(3)라고 지칭한다.


아무튼 crypt(3)을 사용하여 암호해쉬를 구할 일이 있는데 윈도우에서 하려다 보니 지원을 하지 않았다. (정확히 하자면 htpasswd에서 -d 스위치를 넣어도 Automatically using MD5 format.이라고 뜨면서 MD5 알고리즘을 사용한 결과가 나왔다) 그래서 인터넷을 찾아보니 서비스를 제공하는 사이트들이 많았는데, 암호가 넘어간다는데에 괜시리 찝찝한 마음이 들어 클라이언트단에서 해결할 수 있는 방법을 찾아보다 Javascript로 구현된 crypt(3) 소스를 발견할 수 있었다. 그리고 소스코드 상단에 저자의 언급은 다음과 같이 되어있었다.

이 자바스크립트는 PHP, PERL, 셸, 또는 다른 서버기반의 스크립트를 사용하지 않고도 UNIX 함수인 crypt(3)으로 만들어지는 '암호화된 암호'을 생성하는것을 도와줍니다. 다른 코드는 수정하실 필요가 없고, 딱 하나 수정하실 것은 dP()인데 이 함수는 이 코멘트 바로 아래에 있습니다. 자세한 사항은 함수 내의 주석을 참고하세요


이 소스는 이곳에서 얻을 수 있었으며, 아래에 소스를 정리해서 필요한 파일만 넣은 압축파일을 첨부한다. crypt3.htm을 실행하고 왼쪽의 텍스트 입력란에 원하는 암호를 넣고 Encrypt Password를 누르면 Salt(시스템에서 제공하는 랜덤한 값)값이 있냐고 물어보는데 굳이 원하는 값이 없다면 No를 눌러서 진행하면 두번째 텍스트 입력란에 결과값이 나오게 된다. 참고로 crypt(3)은 DES와 Salt의 조합으로 만들어 지게 되는데, 결과값의 앞에는 Salt값이 붙게 된다. 결과값을 자세히 보면 앞부분에 세번째 텍스트 입력란에 있는 Salt값이 항상 붙어있는것을 보게 될것이다.



요새 기회가 드문것 같아 포스팅에 쓸데없이 영문 번역을 첨부했다. 아래는 원문.


댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.