자바 암호화 프레임워크
자바에서는 보안관련하여 JCA (Java Cryptography Architecture) 와 JCE (Java Cryptography Extension) 구조를 갖는다.- JCA는 java.security 패키지에 포함되어 있으며 , 암호화 처리를 위한 표둔 구조, 인터페이스 , 팩토리 등을 정의한다.
- JCE는 javax.crypto 패키지에 포함되어 있으며 암/복호화 , 키 생성, 키 교환 , MAC 알고리즘등 실질적인 암호화 구현을 제공한다.
JCA 와 JCE 로 나누워 져있는 것은 자바 초기에 특정 암호화 알고리즘이 북미 외부로 수출되는 것이 제한되기 때문이다. 이런 이유에서 수출이 제한된 암호 알고리즘들은 JCA의 확장 패키지인 JCE 라는 형태로 제공되었다. 자바 1.4 버전 부터는 이러한 제한이 완화되면서 JDK에 포함되어 제공되고 있다.
JCA 는 프로바이더 구조에 기반을 두고 있다. 모든 프로바이더는 java.security.Provider 클래스의 구현체로 CSP (Cryptographic Service Provider) 라고 부른다. 각 CSP 는 프로바이더의 이름과 구현한 보안 서비스 및 알고리즘 목록을 포함하고 있다. 사용자가 특정 알고리즘의 인스턴스를 요청하면 JCA 는 등록된 프로바이더중에서 구현 알고리즘에 해당하는 구현체를 찾아 인스턴스를 리턴한다.
그림1. 응용프로그램은 어떻게 "ACE" 암호화 인스턴스를 생성하는가 |
현재 우리가 사용하는 자바에는 다양한 프로바이더들이 기본으로 포함되어 있으며, 이들 프로바이더 목록은 java.security 파일에 기술되어 있다.
<JAVA_HOME>/jre/lib/security/java.security
<JRE_HOME>/jre/lib/security/java.security
그림 2. java.security 파일 |
프로바이더 추가
만일 "Cryptix"라는 새로운 프로바이더를 추가하여 사용하고 싶다면 어떤 방법을 있을까 ?
코드에서 다음과 같이 간단하게 프로바이더를 추가하여 사용할 수 있다.
boolean hasCryptix = false; for( java.security.Provider p : java.security.Security.getProviders()){ if("Cryptix".equals(p.getName())){ hasCryptix = true; } } if( !hasCryptix ){ java.security.Security.addProvider( new cryptix.provider.Cryptix() ); }
또는 앞에서 언급한 java.security 파일에 프로바이더를 추가하여 사용할 수 있다.
security.provider.11=cryptix.provider.Cryptix
댓글 없음:
댓글 쓰기