글쓴이 글 목록: opener

[문제해결] JAVA AES256 암호화 2015-03-25

1. 문제상황

JAVA로 AES256 암호화시 다음과 같은 에러가 발생하였다.

3월 25, 2015 11:22:19 오전 org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet [appServlet] in context with path [/roger] threw exception [Request processing failed; nested exception is java.lang.reflect.UndeclaredThrowableException] with root cause
java.security.InvalidKeyException: Illegal key size
	at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024)
	at javax.crypto.Cipher.implInit(Cipher.java:790)
	at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
	at javax.crypto.Cipher.init(Cipher.java:1348)
	at javax.crypto.Cipher.init(Cipher.java:1282)

2. 문제해결

검색결과 미 통상법에 의해 자국내에서만 AES256 방식이 허용되기 때문이라고 한다. 해결을 위해서는 기존 설치된 jar 파일을 교체해야 한다.
1>> 사이트 접속
http://www.oracle.com/technetwork/java/javase/downloads/index.html

illegal key size
2>> 설치파일 다운로드

illegal key size2
3>> jar파일을 아래 경로에 덮어쓰기
{Java설치경로}/jre7/lib/security

[JAVA] log4j Level 설정 2015-03-23

log4j에서는 6단계의 Event Level로 구분하여 로그를 기록하는데 Config Level의 설정에 따라 다음과 같이 로그를 설정 할 수 있다.
log4j

>>> LEVEL 설정

ALL – The ALL has the lowest possible rank and is intended to turn on all logging.
=> 모든 로깅.
TRACE – The TRACE Level designates finer-grained informational events than the DEBUG
=> 세밀
DEBUG – The DEBUG Level designates fine-grained informational events that are most useful to debug an application.
=> 디버깅.
INFO – The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
=> 강조 정보.
WARN – The WARN level designates potentially harmful situations.
=> 경고.
ERROR – The ERROR level designates error events that might still allow the application to continue running.
=> 오류.
FATAL – The FATAL level designates very severe error events that will presumably lead the application to abort.
=> 심각한 오류.
OFF – The OFF has the highest possible rank and is intended to turn off logging.
=> 로깅 해제.

>>> 출력 패턴(ConversionPattern) 설정

%m: 로그 내용 출력
%p: debug, info, warn, error, fatal 등의 priority 출력
%r: 어플이 시작 후 이벤트가 발생하는 시점까지의 경과시간 밀리세컨드로 출력
%c: package 출력
%c{n}: n(숫자) 만큼의 package를 가장 하단 부터 역으로 출력
예) %c{2} 일때 a.b.c 는 b.c 로 출력된다.
%n: 개행문자 출력. 플렛폼에 따라 \r\n 또는 \n 출력.
%d: 이벤트 발생 날짜 출력 ( 프로그램의 실행속도를 느리게 한다.)
예) %d{HH:mm:ss} 또는 %d{dd MMMM yyyy HH:mm:ss}
%C: 호출자의 클래스명 출력
예) %C{2} 일때 a.b.c.TestClass 는 c.TestClass 로 출력된다.
%M: method 이름.
%F: 프로그램 파일명.
%l: caller의 정보
%L: caller의 라인수
%x: thread와 관련된 NDC(nested diagnostic context)
%X: thread와 관련된 MDC(mapped diagnostic context)
%%: % 표시를 출력
%t: 쓰레드 이름

[암호화] 2. 종류 2015-03-20

암호화의 종류를 구분하면 다음과 같다.

encrypt2
* 해쉬 함수 (단방향 암호화)
평문을 고정된 길이의 암호문(해쉬값)을 출력하게되는데 암호화 키를 사용하지 않아 항상 동일한 값이 출력된다. 그러므로 복호화가 필요한 경우에는 사용할 수 없으며 누군가의 신원인증을 위해 사용된다.
>> ex) 사용자 password의 데이터 베이스 저장
* 대칭키 암호화 (비밀키 암호화)
송신자와 수신자가 동일한 키를 가지고 암호화 / 복호화 하므로 암호화 키가 노출되지 않아야 하는 단점이 있으나 암호화 연산 속도가 빨라 효율적으로 시스템을 구축할 수 있다.
– 블록 암호 : 고정된 크기의 블롣단위로 암·복호화 연산을 수행하며 각 블록의 연산에는 동일한 키가 이용된다. 전치와 환자를 반복시켜 암호화하면 평문의 통계적 성질이나 암호 키와의 관계가 나타나지 않아 안전한 암호를 구성할 수 있다.
– 스트림 암호 : 이진화된 평문 스트림과 이진 키스트림 수열의 XOR 연산으로 암호문을 생성하는 방식으로 주기, 선형 복잡도 등 안전성과 관련된 수학적 분석이 가능하고 알고리즘 구현이 쉬운 특징이 있다.
* 비대칭키 암호화 (공개키 암호화)
송신자는 수신자의 공개키에 해당하는 정보를 사용하여 데이터를 암호화하여 네트워크를 통해 전송하고 수신자는 자신의 공개키에 해당하는 비밀키로 암호화된 데이터를 복호화하여 평문을 복원한다.
다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 한다는 장점을 갖는다. 각 사용자는 자신에게 전송하기 위해 사용될 키를 공개하고, 공개된 키 정보로 암호화된 정보를 복호화할 수 있는 키를 비밀로 보유하고 있음으로써 누구나 암호화할 수 있지만 공개키에 대응되는 비밀키를 가진 당사자만 복호화할 수 있는 특징을 가진다.
공개키 암호는 수학적인 난제를 기반으로 설계되어 있고, 암호화나 복호화를 수행하기 위한 연산이 복잡한 수학 연산을 기반으로 구성되기 때문에 효율성은 비밀키 암호에 비해 높지 않다. 공개키 암호의 경우에는 모두가 확인할 수 있는 공개키에 대응되는 비밀키가 각 사용자만 알고 있는 정보이기 때문에 광범위한 인증 기능이 제공된다.
※ 자세한 설명은 [KISA 홈페이지] 참조