9. 9
05-2
해시함수
• 단방향성
해시함수는 단방향 알고리즘이라서 해시값에서 원
본값을 복원할 수 없으므로 안전하게 패스워드를 저
장하기 위해 사용
• 충돌
입력값이 달라도 동일한 결과값이 생성될수 있다.
• 단 입력할수 있는 모든값을 해시함수를 통해서 해
시값을 만들 수 있기 때문에 소금(salt)와 반복
(iteration)을 조절해 준다.
• 종류
MD5, SHA-1, SHA224, HAS-106
11. 11
06-2
메시지 인증코드
• 인증코드를 메시지와 함께 보내면 수신자는 자신이
가진 인증키로 인증코드를 생성하고 이 인증코드와
수신된 인증코드가 동일한지 확인하다. 동일하면 송
신자가 보낸 메시지가 맞다.
• 문제점
• 해결방안
메시지에 순번이나 시간값을 포함하여 전송한다.
13. 13
08
PKI(Public Key Infrastructure)
• 송신자는 자신의 공개키쌍을 생성한 후 CA(인증기관)에 자신의 공개키를 전달하고 이
공개키는 내 소유라는 것을 증명하게 된다.
• CA는 공개키가 송신자것이 맞는게 검증한 다음 "본 CA는 이 공개키가 송신자의 것
임을 증명하는 바입니다" 형태로 전자서명을 한다. 이렇게 서명된 문서를 인증서라도
한다.
을갑 전자서명
공인인증기관
등록/검증
14. 14
09
SSL(secure Socket Layer)
• 일반적으로 https로 통신하는 사이트
• 브라우저에는 여러 CA의 인증서가 등록되어 있어서 이 인증서를 이용해서 서버가 보내
온 인증서가 유효한지 판단할 수 있다. 유효하지 않은 인증서일 경우 유효하지 않은 인
증서라면 경고 문고가 나온다.
• SSL은 전송계층의 암호화방식이므로 HTTP뿐만 아니라 FTP, Telnet, SMTP등의 응용계
층 프로토콜 종류에 상관없이 사용할 수 있다는 장점이 있다.
15. 15
10-1
JCA(Java Cryptography Architecture)
• 자바 플랫폼에서 JCA라는 암호화 관련 기능을 제공하는 라이브러리이다.
• 위에 대한 구현을 JAVA에서 라이브러리로 제공
// AES 암호화
private String iv = “StudyBySillimJCA";// 16자
private SecretKey secretKey;// 암호화키
/**
* AES 비밀키 생성
* @throws UnsupportedEncodingException
*/
public void createSecretKey() throws UnsupportedEncodingException{
byte[] keyBytes = new byte[16];
byte[] b = this.iv.getBytes("UTF-8");
int len = b.length;
if(len > keyBytes.length)
len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
this.secretKey = keySpec;
}