[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 홈페이지] 참조

[암호화] 1. 기본지식 2015-03-20

* 사전적 의미
암호화(encryption)는 정보를 노출시키지 않기 위해 특정 알고리즘을 이용하여 암호화된 형태로 변형하는 것을 말하며 이에 역행하는 과정을 복호화(decryption)라고 하며 이로써 암호화된 정보를 다시 읽을 수 있다. 군사와 정부의 은밀한 대화를 위하여 오랫동안 이용되어 왔고 근래에는 기업에서의 데이터 전달 및 개인의 정보를 저장하는데에도 자주 이용되고 있다.

 

* 개발에 있어 암호화란?
보안이 필요한 정보를 특정 알고리즘을 통해 의미없는 문자열(이진수 덩어리)로 바꾸는 것을 의미하며 이로써 악의적인 목적으로 암호를 해독해 공격하는 것을 방지하는 것을 의미한다. 보안을 위해 시스템적인 보호 방법 보다 근본적인 해결방법이라 할 수 있다.

 

* 암호화 기본요소
가장 좋은 암호화는 알고리즘을 알아내기 어려운 것이라 할 수 있다. (항상 암호화 하려는 자와 복호화 하려는자의 노력이 있을뿐 100% 해독 불가능한 암호화란 있을 수 없다.) 이를 위해 암호화에는 혼돈(Confusion)과 확산(Diffusion)이라는 조건이 필요하다.
– Confusion : 원문의 내용을 짐작하기 어렵게 만들어야 한다.
– Diffusion : 알고리즘의 패턴을 추론하기 어렵게 만들어야 한다.

 

* 고전적인 암호화 : 암호화의 기본요소를 만족하기 위해 다음 두가지 암호화를 교차적으로 적용해 암호화 한다.
치환(Substitution) 암호화와 이동(Transposition) 암호화가 주로 사용되었다.
encrypt
– Substitution : 단순히 문자를 다른문자로 치환하는 방법으로 혼돈의 조건이 만족된다.
>> ex) DCA =>HGE
– Transposition : 무작위로(실제로는 특정규칙이 존재) 문자를 다른문자로 치환하는 방법으로 확산의 조건이 만족된다.
>> ex) DCA =>CBD

 

* 암호화의 발전
컴퓨터의 등장으로 우리는 계산능력이 월등해졌고(과거 기계식 계산에 비해) 이 앞에서 고전적인 암호화는 무용지물이 되었다. 따라서 안전성 보완을 위해 임의의 문자열값인 ‘암호화키’를 활용하게 되었다. 원리는 암호화키와 원문을 바이너리 형태로 변형한 후 배타적 논리합(XOR) 연산에 따라 암호화 & 복호화 를 하게된다.

encrypt1 위와 같은 원리로 암호화 키의 길이, 키의 사용횟수등의 제약이 없다면 복잡도를 무한히 증가시켜 거의 완벽한 암호화를 할 수 있으나 복호화 하는데 비용(시간소모)이 계속 커진다면 사용할 수가 없을 것이기 때문에 일정한 규격에 의한 암호화를 고려해야 한다.

이러한 암호화방식은 양자연산이 가능한 컴퓨팅 방식으로 인해 연산속도가 월등히 빨라진다면 위험하지 않느냐는 의문이 제기 되고는 있지만 양자연산을 통한 해독 알고리즘이 발전되기 전까지는 안전하다고 한다.

즉, 현재까지 주로 사용되는 방식의 암호화는 엄밀히 말하여 완벽한 안전을 보장하는 것이 아니라 현실적으로 풀기 어렵다는 조건부 안전에 의존하고 있다.