암호화의 진화

Posted by ironmask84
2017. 2. 17. 18:09 컴퓨터공학/Security


암호화를 통한 정보보안 방법은 계속 발전해왔습니다.

--> 스테가노그라피(최근엔 워터마크) -> 전치 -> 단일치환 -> 다중치환 (에그니마) -> DES -> AES -> RSA -> 양자암호학

DES : 페이스텔 구조
AES : SPN 구조


블록암호 원리 : 특정 비트 수의 집합을 한 번에 처리하는 암호 알고리즘
스트림암호 원리 : 음성, 영상 스트리밍 전송, 무선 암호화 방식 (평문 XOR 키 스트림)

대칭키 -> 키배포문제 -> Diffie-Hellman 키교환 -> 공개키 암호화

hash(무결성 확인)
-> MAC(메세지인증코드, hash + 대칭키암호 이용) -> 2명만이 키 공유하고 있으므로 거짓행세는 해결
-> 부인방지 문제 -> hash + 공개키 암호를 이용하는 전자서명으로 부인방지 해결 -> 중간자 공격으로 공개키 공유 시 올바른지의 문제  
-> PKI도입(공개키 인증서)로 해결 (공개키에 전자서명을 하여 배포, 이 때의 전자서명은 인증기관에서 발급한 공개키로 확인가능, 그 공개키는 App에 포함되어있다. 브라우져 등)


PKI : 공개키 기반구조 라고 하며, 공개키 암호화 알고리즘을 이용하여, 암호화 통신을 하는 구조에서 공개키를 공유하여야 하는데, 이 때 공개키 공유 시 중간자 공격으로 잘못된 키가 공유되지 않도록 하기 위하여, 공개키를 전자서명 기술을 이용하여 공개키 인증서 형태로 공유합니다.  (공개키 + 공개키를 RSA와 hash알고리즘으로 만든 전자서명 형식의 데이터) 이 때 공개키 인증서는 보통 공개키 암호화알고리즘 + hash 알고리즘 형태로 구성된 전자서명 기술로 만들어집니다.

여기서의 전자서명은 CA의 서명입니다.

이 공개키 인증서는 이미 CA에서 인증된 기관이면, 그 공개키 인증서를 브라우져내에 인증할 수 있는 공개키 및 인증방법이 탑재되어 있습니다.  그러므로, 브라우져를 통해 공개키를 안전하게 입수 가능합니다.

* 인증서 표준 규격은 X.509

* 폐지된 인증서의 일련번호의 목록에 대해 인증기관이 전자서명을 붙인 것이 CRL (Certificate Revocation List)

ECC : 타원곡선 문제의 원리를 이용한 공개키 암호화 알고리즘, 1024비트의 RSA 키와 160비트의 ECC는 동일한 보안수준 정도로 ECC가 고속으로 암호/복호가 가능

** 암호알고리즘의 안정성평가
--> 대표적으로 NIST의 CMVP 가 있다.
--> 암호알고리즘->암호모듈->정보보호제품->응용시스템 순으로 평가한다.
--> CMVP는 암호기술의 적합성, 암호키운용 및 관리 물리적 보안 항목으로 평가한다.

* 평가기준 중요요소
1. 암호해독 비용이 암호화된 정보의 가치 초과
2. 암호해독 시간이 정보의 유효기간 초과


** 위험관리 = 보안정책 -> 위험분석 (위험분석 : 자산식별 -> 위협 및 취약점 평가 -> 위험의 측정)
    -> 대책 선택 -> 대책 구현 -> 잔여위험 수용

** 워터마크 -> 판매자정보를 은닉하고, 저작권표시 용도
** 핑거프린트 -> 구매자 추적정보를 은닉하고, 구매자 추적 용도




 

Key Derivation Functions (PBKDF2)

Posted by ironmask84
2015. 6. 24. 13:34 컴퓨터공학/Security


2년 전 부터 정보 보안에 대한 관심이 많아 지면서,

최근에 또 회사 업무로 인해 아래 암호화 알고리즘에 대해 알아보았다.

PBKDF2 라는 해쉬 컨테이너 알고리즘 이다. (Password-Based Key Derivation Function)

PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
  • PRF: 난수(예: HMAC)
  • Password: 패스워드
  • Salt: 암호학 솔트 (32bit 이상 추천.. 어떤 기준??)
  • c: 원하는 iteration 반복 수 (1000번 이상 추천 어떤 기준??)
  • DLen: 원하는 다이제스트 길이

PBKDF2는 NIST(National Institute of Standards and Technology, 미국표준기술연구소)에 의해서 승인된 알고리즘이고, 미국 정부 시스템에서도 사용자 패스워드의 암호화된 다이제스트를 생성할 때 사용한다.

위에서 PRF라는 것이 약간 헷갈리는데, 해쉬 함수를 의미하는 것으로 보인다.

기존 많은 웹서비스들은  패스워드 저장 시, SHA-1 이나 MD5와 같은 hash 알고리즘을 이용해 DB에 저장하여, 개인 정보를 보호하였으나, 이 방법도 HW의 눈부신 발전에 의해 무차별 공격 (brute-force-attack) 에 취약해지므로, 이를 대체 하기 위한 대표적인 알고리즘이다.

오픈소스이며, 최근에 여러 웹서비스나 프로그램에서 인기있는 알고리즘으로 보임.

내가 생각한 기본적인 사용법의 이해는 아래와 같다.

디바이스 내에는 DIGEST와 Salt 가 저장될 것이며,
Password는 저장되어서는 안된다.

유저가 Password를 입력할 때마다,
저장된 salt를 이용해서 PBKDF2를 통해, Digest가 출력될 것이고,
그 놈이 저장되어 있는 Digeest와 일치하는지의 여부를 볼 것이다.

마지막으로 참고할 만한 사이트 2개를 소개합니다.

1. 위키 : http://en.wikipedia.org/wiki/PBKDF2

2. NHN개발자 사이트 : http://helloworld.naver.com/helloworld/318732

 

문자열을 SHA-512 방식으로 암호화(단방향 암호화 방식 : 예 로그인)

Posted by ironmask84
2013. 2. 4. 09:03 컴퓨터공학/Security


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

import java.security.*;
 
// 문자열을 SHA-512 방식으로 암호화
 
public String encrypt(String input) throws NoSuchAlgorithmException {
 
    String output = "";
 
   
 
    StringBuffer sb = new StringBuffer();
 
    MessageDigest md = MessageDigest.getInstance("SHA-512");
 
 
 
    md.update(input.getBytes());
 
    byte[] msgb = md.digest();
 
 
 
    for (int i = 0; i < msgb.length; i++) {
 
        byte temp = msgb[i];
 
        String str = Integer.toHexString(temp & 0xFF);
 
        while (str.length() < 2) {
 
            str = "0" + str;
 
        }
 
        str = str.substring(str.length() - 2);
 
        sb.append(str);
 
    }
 
   
 
    output = sb.toString();
 
   
 
    return output;

}