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
작성자 : 이승훈

수정일자 :
수정자 :