Subject : Introduction to NIS+
Description :
1. NIS+ 용어정리
* domain : directory object 와 그 자식들의 모든것.
* namespace : root directory 하의 모든 domain 으로 구성됨.
* directory object : NIS+ objects 의 database 를 나타내고 그 database 의
속하는 objects 는 그 directory object 의 children 으로 표현된다.
- directory 와 domain 은 다소 같은것으로 고려될수있다.
기술적으로 domains 은 groups_dir 과 org_dir sub-directories 를 포함
하고 있는 NIS+ directories 이다.
- NIS+ names are not case-sensitive.
* Structure of Names : 이 character sequences 는 label 로 불린다.
예: table_name.org_dir.domainname
hosts table --> hosts.org_dir.domainname
* Serach Path : file 과 만찬가지로 search path 는 table 과 같은 object 를
찾는데 사용된다. NIS+ 는 domainname 을 objects 를 찾기위한 path 로
사용한다. 그러므로 하나의 table 을 참조하기위해서 당신은 directory name
org_dir 을 table name 과 제한해야한다.
NIS+ 는 domainname 을 붙인다. default search path 를 보기위해서는
nisdefaults 를 사용한다. default search path 를 변경하기위해서는
NIS_PATH 변수를 setting 한다.
ex)hyundai3% nisdefaults
Principal Name : nobody (not authenticated)
Domain Name : svc.hei.co.kr.
Host Name : hyundai3.svc.hei.co.kr.
Group Name :
Access Rights : ----rmcdr---r---
Time to live : 12:00:00
Search Path : svc.hei.co.kr.
hei.co.kr.
co.kr.
hyundai3%
hyundai3% setenv NIS_PATH hei.co.kr
hyundai3% nisdefaults
Principal Name : nobody (not authenticated)
Domain Name : svc.hei.co.kr.
Host Name : hyundai3.svc.hei.co.kr.
Group Name :
Access Rights : ----rmcdr---r---
Time to live : 12:00:00
Search Path : hei.co.kr.
* root server : . 의 server 로서 namespace 구조의 top 에 위치한다.
domain 당 하나의 root server 가 있다.
* master server : 하나늬 domain 을 serve 한다.하나의 master server 는
계층구조에서 상위 server 의 client 이다.
* replica server : master server 의 copy. service availability 와 better
performance 를 위해 만들어진다.
* client : name service 를 요청하는것.
2. NIS+ 의 잇점.
* 계층구저의 namespace
* 빠른 table 의 전송
* 확장된 보안.
3. Secure RPC
* Secure RPC 는 NIS+ 에 있어 기본적이다. 이것의 목표는
time-shared system 과 같은정도의 안전한 시스템을 만드는것이다.
즉, time-sharing system 은 login passwd 를 통하여 하나의 user 를 검증한다.
DES(Data encryption standard) 도 마찬가지이다. user 는 local terminal 에
login 할수있는것과 마찬가지로 어떠한 remote machine 에도 login 할수있다.
time-sharing system 에 있어서 검증된 사람(trusted person) 은 시스템 관리자
이며 이는 도덕적인 의무를 가지며 누군가를 구체화하기위해 passwd 를 변경해서는
안된다.
secure RPC 에서도 network admin 은 public keys 가 저장된 database 내에서
entry 를 바꾸지 않아야한다.
여기서 당신은 RPC authentication system 을 이해하기위해서는 두가지의
용어에 익숙해야한다. credentials 와 verifiers.
예로서 ID badge 를 사용할때, credential 은 사람을 구별하는것이다.
즉, name, address, birth date 등등.
verifier는 그 badge 에 붙은 사진이다. 보통 badge 는 badge 상에 사진을 검사하여
사람이 그것을 잘못가지고 가는것을 방지한다.
In RPC, client 는 각각 RPC request 에 관련된 server 에 credential 과 verifier
를 같이보낸다.이때 server 는 단지 verifier(사진)만 보낸다. 왜냐하면
client 는 벌써 server 의 credential 를 알고있기때문이다.
RPC 검증은 개방적인데 이것은 여러종류의 검증시스템들에 RPC 검증이 적용
될수 있다는의미로써 현재 두가지 시스템이 있다.(UNIX and DES).
network service 에 의해 UNIX 검증이 사용될때, credential 은
client 의 machine name, user id, gid group access list를 포함하지만
verifier 는 아무것도 가지지않는다. 왜냐하면 verifier 가 없으며
superuser 가 su 같은 command 로서 적절한 crednetials 를 유추할수있기때문이다.
UNIX 검증에 다른 문제점은 network 상의 모든 machine 들이 UNIX machine 이라고
가정하기때문이다. 그래서 heterogeneous network 상에서 다른 OS 에
적용될때 UNIX 검증은 실패한다.
이러한 UNIX 검증의 문제점을 극복하기위해서 secure RPC 는 DES 검증을 사용
한다. 이것은 verifiers 를 사용하며 대부분의 OS 에의해 사용되어도 충분하다.
4. DES Authentication
* DES 검증은 DES(Data Encryption Standard) 과 public key cryptography 를
사용하여 network 상의 user 와 machine 을 검증한다.
DES 는 표준 암호화 기법이다.public key cryptography(공개키 암호작성및 해독법)
는 두개의 key 를 가지고 해독하는 것이다.(one public and one private)
* DES 검증방법의 보안은 현재시간을 암호화하는 보내는사람의 능력을 기본으로
하고있으며 이는 받는쪽이 해독하고 자신의 시간과 check 할수가 있어야한다.
이 timestamp 는 DES 와 같이 암호화된다. 이 timestamp 는 두가지일이 필요하다.
첫번째는 두 agent 는 현재시간을 일치시켜야만되고 두번째는 보내는쪽과
받는쪽은 동일한 암호화 key 를 사용해야만 한다.
만약, 하나의 network 이 하나의 syncronization program 을 운용한다면
그때 client 와 server 는 자동적으로 syncronize 된다. 만약,
time synchronization 이 가능하지않다면, timestamp 는 network time 대신에
server time 을 사용하여 계산되어질수 있다.
client 는 RPC session 을 사용하기전에 server 에게 시간을 요청할수있고 그때
자신의 clock 과 server clock 간의 차이를 계산할수 있다.
이러한 시간차이는 timestamp 를 계산시에 client clock 의 offset 으로 사용된다.
만약, client 와 server clock 이 sync 를 할수가 없을경우 server 는 client의
request 를 reject 하기시작하고 DES 검증은 server 와 resynchronize 한다.
client 와 server 가 random conversation key 를 생성할때에 같은 encrytion
key 가 만들어지면 그때 public key cryptography 를 사용하여 common key 를
유추한다. common key 는 단지 client와 server 만이 deducing 할수 있는
키 이며 conversation key 는 client 의 timestamp 를 암호화 하고 해독하는데
사용되는 key 이다.
common key 는 conversation key 를 암호화 하고 해독하는데 사용됨.
5. A Secure RPC Client-Server Session
다음은 secure RPC 를 사용한 client-server session 에서발생하는
transaction 의 과정이다.
a. transaction 의 앞서서 user 는 public key 와 secret key 를 생성하는
하나의 프로그램을 돌린다.
(각 유저는 유일한 public key 와 secret key 를 가진다.)
이 키는 암호화된 형태로 /etc/publickey file 에 저장된다.
NIS map 은 publickey.byname, NIS+ 는 cred.org_dir 이다.
b. 그 user 는 login 하여 keylogin program 을 수행한다.(또는 keylogin
program 은 /etc/profile 에 포함되어있어서 user 가 login 할때마다 자동적으로
돌아간다.
이 keylogin program 은 user 에게 secure RPC passwd 를 물어보고 이것을이용하여
그 secret key 를 해독한다.
이 keylogin program 은 그때 passwd 로 secret key 를 해독하여 keyserv daemon
에게 던져준다 이때 keyserv daemon 은 해석된 secret key 를 저장하고 server와
transaction 을 시작하기위해여 user 를 wait 한다.
c. user 가 server 와 transaction 을 시작할때
1)keyserv 는 임의대로 하나의 conversation key 를 만든다.
2)이때 kernel 은 conversation key 를 client 의 timestamp (다른것중에서)
를 암호화한다.
3)keyserv 는 public databasde 에서 server 의 public key 를 찾는다.
4)keyserv는 client 의 secret key 와 server 의 public ley 를 가지고
common key 를 만든다.
5)keyserv 는 common key 를 가지고 conversation key 를 암호화한다.
d. timestamp 와 conversation key 를 포함하는 transmission 은 이때 server
에 보내진다. 전송에는 하나의 credential 과 하나의 verifier 를 포함한다.
credential 은 다음 세가지를 포함한다.
( client 의 이름, common key 로 암호화된 conversation key,
conversation key 로 암호화된 하나의 window.)
그 window 는 server colck 과 client timestamp 간의 허용되는 차이이다.
만약 server clock 과 timestamp 간의 차이가 그 window 보다크면, 그 server 는
client 의 request 를 거절해야만 한다.
client 의 verifier 는 암호화된 timestamp 와 1 씩 증가하는 특정한 window 의
암호화된 verifier 를 가지고 있다.
e. server 가 client 로 부터 transmission 을 받았을때
1)keyserv local 은 server 의 public database 에서 client 의 public key
를 찾는다.
2)keyserv 는 client 의 public key 와 server 의 secret key 를 사용하여
common key 를 유추한다.
3)kernel 은 common key 로써 conversation key 를 해독한다.
4) kernel 은 keyserv 를 불러 해독된 conversation key 와 client 의
timestamp 를 해독한다.
f. server 가 client 의 timestamp 를 해독후, 하나의 credential table dp
4 개의 값을 저장한다.
(client 의 machine name, conversation key, window, client 의 timestamp)
server 는 나중사용을 위해 첫번째 3 개를 저장한다.server 는 불법재사용(replay)
를 방지하기위해 timestamp 를 저장한다. server 는 단지 마지막으로 본
것보다 시간적으로 더큰 것만 accept 해서 어떤 replay 된 transaction 이
reject 되는것을 guarantee 한다.
g. server 는 client 에게 하나의 verifier 를 return 하는데 내용은
index ID(a unique tarnsaction number:server 가 자신의 credential table
에 들록하는 ID) 와 conversation key 에 의해 암호화되는 client 의
timestamp -1 한 값이다.
여기서 timestamp 로 부터 -1 을 하는이유는 client verifier 로서
재사용될수 없도록 하기위함이다.
h. client 는 verifier 를 받고 그 server 를 검증한다. 클라이언트는 단지
서버가 그 verifier 를 보냈을것이라고 알고있는데 왜냐하면 단지 server 만이
client 가 보낸 timestamp 를 알고있기 때문이다.
i. client 는 서버에게 다름 transaction 내에서 그 index ID 를 return 하고
다른 암호화된 timestamp 를 보낸다.
j. server 는 conversation key 에 의해 암호화된 clinet 의 timestamp 에 -1 을
한후 다시보내준다.
첫번째 후에 모든 transaction 에서 client 는 그것의 index ID 와 다른
암호화된 timestamp 를 보내고 server 는 timestamp -1 를 하여 return.
Revision History
작성일자 : 96.09.05
작성자 : 이승훈
수정일자 :
수정자 :