crypt'메카니즘의 이해Garrett Wollman
<wollman@FreeBSD.ORG> 저
25 September 1995.
손준완
<jws@is.tsukuba.ac.jp> 역
1998년 8월 24일.
S/Key는 일방향 해쉬함수(여기서 설명하고 있는 버젼에 있어서는, 이전과의 호환성을 가지기 위해서 MD4를 사용하고 있습니다. 다른 버젼에 있어서는 MD5 또는 DES-MAC를 사용하고 있는 것도 있 습니다.)에 근거한 원타임 패스워드방식입니다. S/Key는 버젼1.5이래 FreeBSD에 있어서의 표준이 되어왔습니다. S/Key는 FreeBSD이외의 여러 시스템상에서도 사용가능할 뿐만 아니라 그 실제 시스템의 수도 증가하고 있습니다. S/Key는 Bell Communication Research, Inc.의 등록상표입니다.
이하의 설명에서는 다른 세종류의 패스워드가 등장합니다.
우선 첫번째로, 여러분이 보통 사용하고 있는 유닉스 스타일의, 또는
Kerberos 패스워드입니다. 여기서는 "유닉스 패스워드"라고 부르기
로 하겠습니다.
두번째는, S/Key의 'key'프로그램에 의해 생성되어,
'keyinit'프로그램과 로그인 프롬프트에 의해 접수되어지는
1회용(one-time) 패스워드입니다. 여기서는 "원타임 패스워드"라고 부르기로
하겠습니다.
세번째 패스워드는, 'key'(경우에 따라서는 'keyinit')프로그램에 대해서 사용자가 입력하는 "비밀 패스워드" 또는
단순히 "패스워드"라고 부르기로 하겠습니다.
비밀 패스워드는 유닉스 패스워드와 어떤 관련성을 가질 필요는 없 습니다(양쪽을 동일히 설정하는 것은 가능하지만 권장하지 않습니다). 유닉스 패스워드는 길이가 8문자로 제한되어져 있는 반면, S/Key에서 비밀 패스워드의 길이는 여러분 마음껏 지정할수 있습니다. 필자는 7문자로된 패스워드를 사용하고 있습니다. 일반적으로, S/Key 시스템은 유닉스 패스워드 시스템과 완전히 독립적 으로 동작하도록 되어져 있습니다.
S/Key 시스템에서는 부가적으로 2종류의 데이타를 사용합니다.
하나는 "시드(seed)" 또는, (혼동을 불러일으킵니다만) "키(key)"로 불리
는 것으로, 2개의 문자와 5개의 숫자로 구성되어 있습니다.
또다른 하나는, "반복계수(iteration count)"로서 1이상 100이하의 정수
입니다.
S/Key는 위에서 설명한 데이타를 이용해 원타임 패스워드를 생성합
니다.
그 방법은 우선, 시드와 비밀 패스워드를 연결시켜 반복계수의 횟수만큼
일방향 해쉬(RSA Data Security, Inc.의 MD4 안전 해쉬함수)를 반복
계산한 다음, 그 결과치를 6개의 영단어로 변환시킵니다.
'login'과 'su'프로그램은 가장 최근에 사용한 원
타임 패스워드를 기록하고 있어, 그 원타임 패스워드와 사용자가 입력
한 원타임 패스워드의 해쉬함수 결과치가 일치할 경우 이 사용자를
인증(authentication)하게 되는것입니다.
일방향 해쉬함수를 사용하기 때문에, 혹시 (로그인등에 성공한) 원타
임 패스워드가 도청당했다고 하더라도, 다음번에 사용될 원타임 패스워
드를 생성하는 것은 불가능합니다.
반복계수는 로그인등이 성공할 때 마다 하나씩 감소되어져, 사용자와
로그인 프로그램 사이에서 동기되어집니다.
(반복계수가 1이 되면 S/Key는 다시 초기화될 필요가 있습니다.)
다음은 S/Key관련의 4개의 프로그램에 대해 설명하겠습니다.
'key'프로그램은 반복계수, 시드, 비밀 패스워드를 억셉트
하여 원타임 패스워드를 생성합니다.
'keyinit'프로그램은 S/Key의 초기화 그리고 비밀 패스워드,
반복계수, 시드를 변경할 때 사용됩니다.
이 프로그램을 실행하는데는 비밀 패스워드 또는, 반복계수, 시드, 원타임
패스워드 어느 쪽인가를 필요로 합니다.
'keyinfo'프로그램은 /etc/skeykeys라는 파일을 조사
해서 이 프로그램을 기동한 사용자의 현재의 반복계수와 시드를 표시
해줍니다.
마지막으로, 'login'과 'su'프로그램 에 관해서
입니다만, 이들은 시스템의 사용자 인증를 위한 S/Key의 원타임 패스워드를
억셉트할 처리를 행합니다.
'login'는 지정된 특정주소에서
의 접속에 대해서, 유닉스 패스워드의 사용을 거부하는
기능, 반대로 말하면 S/Key의 이용을 강제하는 기능도 가지고 있습
니다.
이제부터 서로다른 네종류의 조작에 대해 설명하도록 하겠습니다.
첫번째는, 'keyinit'프로그램을 신뢰할 수 있는 통신로상
에서 이용하는 경우로서, 제일 처음 S/Key를 설정하는 조작이나
사용 개시후의 비밀 패스워드 또는 시드를 변경하는 조작입니다.
두번째는, 'keyinit'프로그램을 신뢰할 수 없는 통신로상
에서 이용하는 경우로서, 조작의 목적은 첫번째와 같습니다.
이 경우에는 'key'프로그램을 배용할 필요가 있습니다.
세번째는, 'key'프로그램을 사용해서 신뢰할수 없는 통신로
를 통해 로그인하는 조작입니다.
네번째는, 'key'프로그램을 사용해서 복수의 원타임 패스워
드를 생성하는 조작입니다.
여기서 생성된 복수의 원타임 패스워드는 메모 또는 인쇄해서
휴대하며, 신뢰할 수 있는 통신로가 전혀 없는 곳(예를 들어
회의장)에서 사용할 수 있습니다.
crypt'메카니즘의 이해