IT

str = str.replaceAll("(?i)<script[^>]*>[\\w|\\t|\\r|\\W]*</script>" , "");
str = str.replaceAll("(?i)<head[^>]*>[\\w|\\t|\\r|\\W]*</head>" , "");
str = str.replaceAll("<", "&lt;");
str = str.replaceAll(">", "&gt;");
str = str.replaceAll("'", "\"");
str = str.replaceAll("\"", "&quot;");

Posted by sinpk

HELO localhost (또는 보내는 사람의 서버명) MAIL From: <aa@bbb.com> RCPT To: <ccc@ddd.com> DATA From: 보내는사람<aaa@bb.com> To: 받는사람<ccc@ddd.com> Subject: 고객님 안녕하십니까? Content-Type: text/html; charset=utf-8

본문(HTML 코드)

. (메일 송신 문자)

QUIT(메일 종료)

telnet <ip 또는 도메인명> 25

텔넷으로 접속하여도 확인 가능하다.

 

소켓의 스트림을 얻어서 BufferedReader, PrintWriter 객체를 생성하여 사용하면된다.

 

Posted by sinpk

[목 차]

==============================================================

Base64

SSL이란?

공인인증

암호화 알고리즘

LDAP이란?

PKI?

X.509?

==============================================================

1. Base64 64진수라는 뜻이다.

, Base64 인코딩이란 2진수 -> 64진수로 변경한다는 것!

기존의 1Byte ->8bit  1Byte -> 6bit로 표현한다는 것!

24bit단위로 인코딩이 수행된다. (8 6의 최소공배수)

8bit  |  8bit  |  8bit  e  6bit  |  6bit  |  6bit  |  6bit

남는 비트가 생기면 0으로 padding하며 그리고 나서도 남는 6bit들은 =로 치환한다.

) a(97)

8bit  |  8bit (:0)  |  8bit (:0)

6bit  |  6bit(0 padding)  |  =  |  =

------------Base64 문자 set ()-----------

A~Z : 0~25

a~z : 26~51

0~9 : 52~61

+ : 62

/ : 63

-----------------------------------------

2. SSL이란? (Secure Socket Layer)

client server 사이에 오가는 데이터의 인증 및 암호화 통신을 위해 사용되는 프로토콜이다.

- SSL 수행 3단계

1) SSL Server Authentication  : 사용자 웹 브라우저가 상대방의 웹 서버를 인증하는 단계

SSL을 지원하는 웹 브라우저는 표준 공용키 암호화 기법을 사용하여 서버의 인증서와 공용ID를 브라우저가 신뢰하는 인증기관(Trusted CA)으로부터 발급 받았는지 여부를 인증하는 기능을 내장함.

2) SSL Client Authentication : 웹 서버가 자신에게 요청한 클라이언트를 인증하는 단계

서버 인증 시에 사용했던 동일한 기법으로 인증하는 서버에 내장된 SSL 지원 s/w나 서버 앞에 배치된SSL 하드웨어는 client의 인증서와 공용ID를 실제로 서버가 신뢰하는 인증기관으로부터 발급 받았는지 여부를 인증하는 기능을 내장하고 있다.

3) Encrypt Connection : 서로에 대한 인증단계 이후 정상적으로 종결되면 클라이언트와 서버 사이에 교환되는 모든 데이터는 사적인 내용을 보호하기 위한 암호화를 요구 받는다또한 SSL커넥션을 통해 암호화된 데이터 역시 전송 중 변경을 방지하기 위해 Hash알고리즘이라 불리는 기술에 의해 보호된다.

==>> 위의 3단계를 기반으로 실제로 구현되는 순서는 다음과 같으며 SSL또한 TCP프로토콜에 기반을 두고 있으므로 3Handshake가 이루어져야만 한다.

- SSL Handshaking

 

- SSL 암호화 방식

디지털 인증기술공개키 암호화대칭키 암호화 방식을 모두 사용하게 된다.

먼저 디지털 인증서 교환을 통해 상대방에 대한 인증을 확실히 하고 이를 통해 공개키 암호화의 단점을 보완하였다.

다음으로 공개키 암호화 기술을 이용해서 세션키를 client, server가 공유한다.

마지막으로 공유된 세션키를 이용해서 대칭키 암호화 방식으로 통신한다이 방식은 공개키 방식에 비해 낮은 수준의 보안을 제공하지만 데이터 처리 부하가 적어서 빠르게 통신이 가능해지기에 사용한다.

SSL에서 세션키를 통해 암호화하는 암호화 기법으로는 DES, 3DES, RC2, RC4등이 있고 40비트~168비트 까지 사용된다메시지 무결성 보장을 위해 사용되는 Hash알고리즘으로는 MD5 SHA1등이 사용된다.

3. 공인인증

어떤 문서를 모든 사람들이 신뢰할 수 있도록 공탁이란 것을 하듯이공인인증서를 이용하여 이 거래는 법적으로 유효한 것입니다 라고 인감도장을 찍음으로써 거래를 신뢰 할 수 있도록 하는 것이다또한 이 공인인증서는 국가가 인정한 공인기관(CA)으로 하여금 유효성을 관리하도록 하고 있다.

 

4. 암호화 알고리즘

1) 대칭키 암호화 (종류 : DES, 3DES, RC4, AES, SEED)

비밀키 암호 알고리즘 혹은 단일키 암호 알고리즘이라고 불리기도 한다.

이 방식은 송/수신자가 동일한 키에 의해 암호화 및 복호화 과정을 수행한다.

문제점 : 통신하는 상대마다 각각 다른 비밀키가 필요하다., 비밀키 공유방법같은 비밀키를 계속 사용하는 것으로 인한 문제

블록 암호 알고리즘

고정된 크기의 입력 블록을 고정된 크기의 출력 블록으로 변경하는 암호알고리즘에 의해 암호화/복호화 과정을 수행한다.

스트림 암호 알고리즘

이진화된 평문과 키 이진 수열을 배타적 논리합(eXclusive-OR)이라는 비트 단위 이진 연산으로 결합하여 암호문을 생성하는 방식이다사용하는 스트림이 주기적인지 아닌지에 따라 두가지로 분류 가능하다.

키 스트림이 어떤 주기를 갖고 반복되는 경우에 사용하는 주기적 스트림 암호 알고리즘과

키가 반복이 없는 경우에 사용하는 비주기적 스트림 암호 알고리즘이 있다.

대표적 알고리즘으로는 RC4, SEAL 등이 있다.

2) 비대칭키(공개키암호화 (RSA, ECC, DSA,KCDSA)

공개키 암호 알고리즘을 사용하는 시스템은 암복호화에 사용되는 Key Set을 다르게 생성배포 및 관리함으로 높은 수준의 보안 유지가 가능하다공개키 암호 시스템은 두 개의 Key Set 생성하여 그 중 하나를 공개하고(Public key), 나머지 하나는 비밀키로 자신이 보관하여(Private Key)사용하는 암호 시스템 방식이다.

문제 : 암복호화의 속도가 느리고 공개키의 무결성 유지 문제가 있다.

 

3) Hybrid 방식 암호화

실무에 있어서는 대칭키 및 비대칭키 방식을 혼용하여 사용한다전송하고자 하는 실제 데이터는 대칭키 방식을 이용하여 암호화하고이때 사용되는 대칭키는 PKI방식의 비대칭키를 이용하여 암호화를 한 후이를 전송하게 되는 방식이다.

실제 데이터를 대칭키 방식으로 암호화함으로써속도 및 길이의 효율성을 높이며 대칭키는 PKI방식을 이용함으로써 키배포의 위험성을 없애고 보안을 강화할 수 있는 것이다.

 

4) Hash (전자서명에 응용됨, SHA-1, MD5)

다양한 길이의 입력을 고정된 길이의 비트 문자열(해쉬코드)로 변환하여 출력하는 함수로써다음과 같은 성질을 갖고 있다.

1) 출력된 해쉬코드에 대한 원본 비트 문자열을 찾아내는 것은 불가능

2) 주어진 입력에 대해 같은 해쉬코드를 생성하는 또 다른 입력값을 찾아내는 것은 불가능

이러한 성질을 이용하여 해쉬 함수는 전자서명의 무결성을 보장하는데 이용된다또한비밀번호와 같이 복호화할 필요가 없는 자료의 단방향 암호화에도 사용 되고 있다.

- Hash를 이용한 데이터 교환의 동작 순서

송신자에서

ⓐ 송신하고자 하는 문자열의 해쉬코드를 구한다.

ⓑ 구해진 해쉬코드에 비밀키로 서명한다.

ⓒ 평문과 ⓑ의 데이터를 묶어서 수신자의 공개키로 암호화 한다.

수신자에서

ⓓ 자신의 개인키로 복호화 한다.

ⓔ 풀려진 전자서명(해쉬코드+송신자의 비밀키)값을 송신자의 공개키로 풀어서 해쉬코드를 구한다.

ⓕ ⓓ에서 구한 평문을 해쉬함수를 적용하여 그 결과와 ⓔ의 해쉬코드를 비교하여 무결성을 검증한다.

5. LDAP이란? (Lightweight Directory Access Protocol)

조직이나개체그리고 인터넷이나 기업내의 인트라넷 등 네트웍 상에 있는 파일이나 장치들과 같은 자원 등의 위치를 찾을 수 있게 해주는 소프트웨어 프로토콜이다.

LDAP은 오픈된 프로토콜로 TCP 389포트를 사용하면서 외부에서 접속 가능하도록 구성하는 것이 기본이다.

공인인증서의 경우 해당 공인 인증기관의 LDAP 서버에 게시되고 외부에서 인증서에 대한 유효성 검증을 하기 위해 CRL(인증서 폐기목록)을 게시하고 이 CRL 정보를 아무데서나 획득하여 인증서를 검증할 수 있도록 한다.

6. PKI?(Public Key Infrastructure)

인터넷과 같이 안전이 보장되지 않은 공중망 사용자들이 신뢰할 수 있는 기관에서 부여된 한 쌍의 공개키와 개인키를 사용함으로써 안전하고 은밀하게 데이터나 자금을 교환할 수 있게 해준다.

PKI는 한 개인이나 기관을 실별 할 수 있는 디지털 인증서와 인증서를 저장했다가 필요할 때 불러다 쓸 수 있는 디렉토리 서비스를 제공한다.

- PKI가 나오게 된 배경

대칭키 암호 기술 : 비밀키 분배/관리의 어려움

비대칭키(공개키암호 기술 : 공개키 무결성(인증)문제

PKI 탄생 : 신뢰하는 제 3의 기관에서 발행한 인증서로 공개키 배포.(인증서 : “개인정보 + 공개키CA의 개인키로 암호화)

- PKI

CA : 인증 정책을 수립인증서 및 인증서 취소 목록 관리

RA : 사용자 신분 확인, PKI를 이용하는 Application CA간 인터페이스 제공

Repository : PKI관련 정보 공개(Certificate, CRL)

Certificate : 인증서(서버클라이언트), 인증서 활용(전자서명암호화)

인증 정책 : 인증서를 관리(생성저장분배폐기갱신…)하기 위한 절차 등을 기술

- PKI 기반의 전자서명 기술

대칭키 암호 + 공개키 암호 + 해쉬 알고리즘을 혼용하여 사용

대칭키 암호 : 암복호화 속도 빠름데이터 암호화

공개키 암호(PKI) : 키 분배전자서명

해쉬 알고리즘 : 무결성 제공

7. X.509?

공개키 인증서와 인증 알고리즘의 표준 가운데에서 공개 키 기반(PKI)의 표준이다.

참고 사이트 : http://www.nexpert.net/359 (추가 설명 추가 해야 함...)

참고사이트 : http://sol9501.blog.me/70105358014 (추가 설명 및 이해 필요...)

 

번외. X.509 PKI 인증서와 CRL Profile

참고 사이트 : http://datatracker.ietf.org/doc/rfc3280/


Posted by sinpk

AES-256 알고리즘을 개발해야 하는데, 인터넷으로 검색을 해보니 AES-128은 지원이 된다고 한다.

 

java.security.InvalidKeyException: Illegal key size

 

오류 해결 방법은 $JAVA_HOME/jre/lib/security 폴더 아래의 local_policy.jar, US_export_policy.jar 를 패치해주기만 하면 끝!

 

 

 

다운로드 사이트 : http://www.oracle.com/technetwork/java/javase/downloads/index.html

 

내가 사용하고 있는 자바 버전은 jdk1.6

 

 

1. Previous Releases 메뉴를 클릭한다.

 

 

 

 

2.  Java Platform Technologies 를 선택한다.

 

 

 

 

3. Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 을 선택한다.

 

 

 

 

4. 사용하고 있는 해당 자바 버전의 JCE 를 Accept License Agreement 한 후에 다운로드 받는다.

 

 

 

 

5. 마지막으로 jre/lib/security 폴더 밑에 있는 local_policy.jar, US_export_policy.jar 를 덮어씌우기 하면 된다.

'소프트웨어 > Java' 카테고리의 다른 글

Socket으로 이메일 전송(smtp)  (0) 2013.08.13
Base64,SSL,암호화알고리즘,LDAP,PKI,X.509  (0) 2013.08.07
URL인코딩  (0) 2013.08.01
BASE64Encoder rt.jar 에러 해결방법  (0) 2013.07.31
@SuppressWarnings  (0) 2013.07.15
Posted by sinpk

URL인코딩

2013. 8. 1. 00:16 : 소프트웨어/Java

가끔 웹 브라우저의 주소줄에 깨진 글자를 보게 되는데 이것이 바로 웹 인코딩(Encoding)된 문자

    URLEncoder 클래스는 운영체제마다 일부 문자를 인식하는 방식이 다르기 때문

URLEncoder 클래스는 일반 문자열을 웹에서 통용되는 'x-www-form-urlencoded' 형식으로 변환하는 역할을 담당

 대소문자, 숫자, 밑줄을 제외한 URL에 있는 문자를 코드화하는 것

▣ URLEncoder 변환규칙
◈ 아스키문자(a~z, A~Z, 1~9),  '.',  '-',  '*',  '_' : 그대로 전달
◈ 공백문자(' ') : '+' 기호로 변환됨
◈ 기타문자 : '%xy' 와 같이 세 개의 문자로 변환되며, 이 때 xy는 해당 문자의 ASCII코드를 16진수화한 결과를 두자리의 대문자로 나타낸 것이다.

▣ URLEncoder를 이용한 웹인코딩
◈ String enStr = URLEncoder.encode("네이버-www.naver.com", "EUC_KR");

 

반대되는 개념으로 URLDecoder 클래스는 URLEncoder로 인코딩된 결과를 디코딩하는 클래스

변환규칙은 URLEncoder 클래스의 역으로 텍스트화

▣ URLDecoder를 이용한 웹디코딩
◈ String enStr = URLEncoder.encode("네이버-www.naver.com", "EUC_KR");
◈ String deStr = URLDecoder.decode(enStr, "EUC_KR"); 

Posted by sinpk