JAVA Java 보안과 암호화 (개론)

황제낙엽 2007.09.05 16:11 조회 수 : 117 추천:76

sitelink1  
sitelink2  
sitelink3  
sitelink4  
extra_vars5  
extra_vars6  
Chapter 1 개념

Chapter 2 기본기

Chapter 3 난수

Chapter 4 키관리

Chapter 5 인증

Chapter 7 암호화

Chapter 8 서명된 애플릿 (이 챕터 부분만 따로 정리했다)

1. Microsoft SDK for JAVA(http://www.microsoft.com/java/)를 다운 로드 한 후 설치한다.

2. 설치한 Microsoft SDK for JAVA의 bin 디렉토리를 path에 설정해 준다.
예, path = %path%;E:Program FilesMicrosoft SDK for Java 4.0bin
 
3. makecert 명령어를 사용하여 인증서를 생성한다.
             makecert -sk [인증서 별명] -n "CN=[인증 이름]" [인증서 화일명]
-. 공개키와 비밀키 쌍이 생성되어지고, 비밀키는 레지스트리에 저장된다.
-. 인증서가 주어진 파일명으로 생성된다.
예, makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
             e RayCertification.cer 파일이 생성된다
 
makecert 명령어의 option 설명
·   -sk "KeyName"
보관되어 있는 키 이름.
없을 경우 이 이름으로 레지스트리에 키를 생성한다.
·   -ss "Store"
인증서의 보관소 명
·   -sr "Location"
레지스트리 내의 인증서의 보관소 위치를 나타냄.
( CurrentUser | LocalMachine ) 중 하나
·   -# "Number"
1~130사이의 수.
·   -$ "Authority"
인증서를 발급한 기관 형태 ( individual | commercial ) 중 하나
·   -n "X.509 name"
X.500의 구분되는 이름 ( 예 : CN=Chungnam )
·   -?
기본 옵션의 목록 설명
·   -!
확장 옵션의 목록 설명
 
4. java 코드에 sign을 할 때, .spc 형식의 서명 파일이 필요하므로 cert2spc 명령을 사용하여 .cer 서명 파일에서 .spc 형식의 서명 파일을 만든다.
             cert2spc [인증서 화일명] [.spc 화일]
예 > cert2spc RayCertification.cer RayCertification.spc
             e RayCertification.spc 파일이 생성된다.
 
5. 서명이 필요한 파일들을 dubuild 명령을 사용하여 cab 형식의 파일로 만든다.
             dubuild [.cab 파일] [path] /D [“frindlyname”] /I [pattern] /V [version]
예 > dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
             e SignedRayApplet.cab 파일이 생성된다.
 
dubuild 명령어의 option 설명
n  /H 또는 /?
도움이 되는 텍스트를 보여준다.
n  /D “friendlyname”
Distribution Unit의 친근한 이름 설정 ( 예 : … /D “RaySignTest” …)
n  /P oldDUName.cab
이전 Distribution Unit의 파일 이름.
n  /M
multi-CAB Distribution Unit을 만든다.
n  /I {pattern}
{pattern}에 매칭되는 파일들을 포함한다.
n  /X {pattern}
{pattern}에 매칭되는 파일들을 배제한다.
n  /N “namespace”
Distribution Unit의 namespace.
n  /B {beaninfo}
각각의 bean에 대한 정보.
n  /V {version}
기본적인 버전 숫자를 설정한다. ( 예: …. /V 1,1,1,1 … )
n  /Z
IE 3.0과 호환 가능한 MSZIP 압축을 사용한다.
n  더 자세한 정보는 /H 또는 /?를 사용하여 확인하기 바란다.

 
 
6. signcode 명령어를 사용하여 앞에서 만든 인증서를 cab 파일에 포함 시키고, 레지스트리의 비밀키로 서명을 한다.
             signcode -j javasign.dll -jp [레벨] -spc [.spc 파일] ?k [key 이름] [.cab 파일]
예 > signcode -j javasign.dll -jp LowX -spc RayCertification.spc -k RayCertification SignedRayApplet.cab
             e Sign된 SignedRayApplet.cab 파일이 된다.
 
signcode 명령어의 option 설명
n   -spc "file"
SPC를 포함하는 파일명
n   -v "pvkFile"
비밀키를 포함하고 있는 파일명
n   -k "KeyName"
레지스트리 내의 키 이름
n   -n "name"
사인할 내용에 대한 텍스트 이름
n   -l "info"
사인할 내용에 대한 부가 설명이 있는 장소 ( 예: URL )
n   -p "provider"
시스템 내의 암호화 시스템 제공자 이름
n   -y "type"
시스템 내의 암호화 시스템 제공자 형태
n   -ky "keyType"
키의 종류 ( signature | exchange | 정수 ) 중 하나
n   -$ "authority"
인증서를 인증한 기관의 종류 ( individual | commercial ) 중 하나
n   -a "algorithm"
사인에 이용된 해쉬 알고리즘. ( md5 | sha1 ) 중 하나. 기본값 : md5
n   -t "URL"
타임스탬프를 찍어줄 서버의 HTTP주소
n   -tr "number"
타임스탬프 서버 접속 실패시 재시도 횟수. 기본은 1회
n   -tw "number"
타임스탬프간 간격 (초단위). 기본은 0초
n   -j "dllName"
사인에 필요한 부가 특성들을 포함하는 DLL 파일명 ( 예 : 보안 레벨 )
n   -jp "param"
DLL파일에 넘길 파라미터
n   -c "file"
인코딩된 SPC를 포함한 X.509파일명
n   -s "Store"
인증서를 가지고 있는 인증서 보관소명 . 기본은 mystore
n   -r "location"
레지스트리 내의 인증서 보관소의 위치 ( localMachine | currentUser )중 하나. 기본은 currentUser
n   -sp "policy"
인증서 검증에 필요한 모든 인증서를 포함할 것인가 아니면 SPC보관소에 들어있는 인증서가 나올 때까지 포함할 것인가에 대한 정책. ( chain | spcstore )중 하나. 기본은 spcstore
n   -cn "name"
인증서 일반 이름 (별명)
n   -x
사인하지 말고 타임스탬프만 받을 것을 명시
 
7. html 페이지에 다음과 같이 넣는다.
      <applet code="org.raytrust.RayApplet.class" width=320 height=270>
        <param name=useslibrary value='RaySignTest'>       
        <param name=useslibraryversion value='1,1,1,1'>
        <param name=useslibrarycodebase value='SignedRayApplet.cab'>
</applet>
    **** 주의!!!! ****
위의 html 코드에서 음영으로 표시된 부분들은 적절하게 바꾸어줘야 한다.
첫번째의 경우 정확하게 사용한 패키지명을 적어주면 된다.
두번째의 경우 dubuild.exe 명령 사용시 /D 옵션으로 주었던 friendlyname과 일치해야 한다.
셋번째의 경우 dubuild.exe 명령 사용시 /V 옵션으로 주었던 version과 일치해야 한다.
네번째의 경우 dubuild.exe 명령 사용시 이용했던 cab 파일 이름과 일치해야 한다.
8. 위와 같이 하면, 클라이언트가 연결 되었을 때 윈도우가 뜨면서 인증할 것인지를 물어 봅니다. 여기서, YES를 해주면 모든 권한을 가지게 된다.
  일부의 권한만을 주기 위해서는 프로그램 내부에서 다음과 같이 해 주면 된다.
 
if (Class.forName("com.ms.security.PolicyEngine")!=null) {
               PolicyEngine.assertPermission(PermissionID.FILEIO);
}
  위의 예제 중에서 다음 부분에 여러 가지 권한들을 부여할 수 있다.
PolicyEngine.assertPermission(PermissionID.???????);
  ”???????” 부분은 다음과 같은 ID가 올 수 있습니다.
1. SYSTEM
2. FILEIO
3. NETIO
4. THREAD
5. PROPERTY
6. EXEC
7. REFLECTION
8. PRINTING
9. SECURITY
10. REGISTRY
11. CLIENTSTORE
12. UI
13. SYSSTREAMS
14. USERFILEIO
15. MULTIMEDIA

l 배치 파일의 내용
1: makecert -sk RayCertification -n "CN=Raytrust Org." RayCertification.cer
2: cert2spc RayCertification.cer RayCertification.spc
3: dubuild SignedRayApplet.cab . /D "RaySignTest" /I *.class /V 1,1,1,1
4: signcode -j javasign.dll -jp LowX -spc RayCertification.spc
-k RayCertification SignedRayApplet.cab


출처 : Tong - taehoe님의 보안통