공개키 암호화 [RSA구현]

Posted by 백창
2015.01.16 15:33 컴퓨터보안/Programming


 개념


 공개키 알고리즘은 암호화하는 키와 해독하는 키가 동일하지 않도록(혹은 하나로 다른 하나를 유추할 수 없도록) 고안된 방식이다. 공개키 알고리즘을 이용하면, 암호문을 작성할 때 사용하는 암호키가 외부에 공개되어도 비밀키를 모르면 암호문을 해독할 수 없다.


 공개키 알고리즘에서는 사용자가 두 개의 암호키(공개키와 비밀키)를 사용하는데, 공개키는 원문서를 암호화하는 데 사용하므로 원칙적으로 누구에게나 공개된다. 따라서 송신 호스트는 공개키로 원문서를 암호화하여 전송한다. 수신 호스트에서는 암호문을 해독하기 위해 비밀키를 사용한다.


 공개키 알고리즘의 대표 예는 RSA 알고리즘이 있다.



그림출처 : 네이버 지식백과



 RSA 구현


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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
 
import javax.crypto.Cipher;
 
public class RSA {
    //RSA
    private PublicKey publicKey;
    private PrivateKey privateKey;
    
    /**
     * 키 쌍 생성
     * */
    public KeyPair keyGen(){
        KeyPair keyPair = null;
        
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
            keyPair = keyPairGen.generateKeyPair();
            
            publicKey = keyPair.getPublic();
            privateKey= keyPair.getPrivate();
            
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        
        return keyPair;
    }
    
    public PublicKey getPublic(){
        return publicKey;
    }
    public PrivateKey getPrivate(){
        return privateKey;
    }
    
    /**
     * 암호화
     * */
    public byte[] encryptRSA(byte[] input, PublicKey publicKey)throws Exception{
        byte[] encrypted = null;
        
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            encrypted = cipher.doFinal(input);
            
        } catch(Exception e){
            e.printStackTrace();
        }
        
        return encrypted;
    }
    /**
     * 암호화
     * */
    public byte[] encryptRSA(byte[] input, PrivateKey privateKey)throws Exception{
        byte[] encrypted = null;
        
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, privateKey);
            encrypted = cipher.doFinal(input);
            
        } catch(Exception e){
            e.printStackTrace();
        }
        
        return encrypted;
    }
    
    /**
     * 복호화
     * */
    public byte[] decryptRSA(byte[] input, PrivateKey privateKey) throws Exception{
        byte[] decrypted = null;
        try{
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            decrypted = cipher.doFinal(input);
        }catch(Exception e){
            e.printStackTrace();
        }
        
        return decrypted;
    }
    
    /**
     * 복호화
     * */
    public byte[] decryptRSA(byte[] input, PublicKey publicKey) throws Exception{
        byte[] decrypted = null;
        try{
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, publicKey);
            decrypted = cipher.doFinal(input);
        }catch(Exception e){
            e.printStackTrace();
        }
        
        return decrypted;
    }
    
}
 
 
cs


'컴퓨터보안 > Programming' 카테고리의 다른 글

공개키 암호화 [RSA구현]  (0) 2015.01.16
대칭키 암호화  (0) 2014.12.27
DES 암호화 과정(java)  (0) 2014.10.20
이 댓글을 비밀 댓글로

고전암호기법

Posted by 백창
2014.10.20 10:18 컴퓨터보안/개념

기본용어

- plaintext : 평문

- ciphertext : 암호문

- cipher : 평문을 암호화 하는 알고리즘

- key : 전달자와 수신자만 알고 있는 암호화에 사용되는 정보

- encipher : 암호화

- decipher : 복호화

- cryptography : 암호학

- cryptanalysis(codebreaking) : 알려진 키 없이 복호화 (해커들..) 암호해독학

- cryptology : 암호학과 암호해독학을 합친


대칭 알고리즘

- 강력한 알고리즘

- 비밀 키의 안전한 전달법


Cryptography

- 치환(substitution) : 각 원소가 다른 원소에 맵핑

- 전치(Transposition) : 각 원소를 재배치


공격 유형(가진정보)

- 암호문 단독 공격 : 암호 알고리즘, 암호문

- 기지 평문 공격 : 암호 알고리즘, 암호문, 하나 이상의 비밀키에 의한 평문-암호문 쌍

- 선택 평문 공격 : 암호 알고리즘. 암호문, 해독자가 선택한 평문 메시지와 비밀키로 생성된 그 평문에 대한 암호문

- 선택 암호문 공격 : 암호 알고리즘, 암호문, 해독자가 선택한 목적 암호문과 비밀키로 생성된 그 암호문의 해독된 평문

- 선택 원문 공격 : 암호 알고리즘, 암호문, 해독자가 선택한 평문 메시지와 비밀키로 생성된 그 평문에 대한 암호문, 해독자가 선택한 목적 암호문과 비밀키로 생성된 암호문에 해독된 평문


절대 안정성과 계산 안정성

- 절대 안정성 : 해당 암호 기법으로 생성된 암호문을 아무리 많이 사용하더라도 해당 암호문에 평문을 알아낼 수 있는 충분한 정보를 포함하지 않을 경우(OTP)

- 계산 안전성 : 암호 해독 비용이 암호화된 정보의 가치 초과, 암호 해독 시간이 정보의 유효 기간 초과


Ceaser cipher

- 치환에 의한 암호화

- 3번째 글자로 대체

- 25개의 키를 가짐

- 평문의 언어를 알고 있으면 쉽게 인식 가능(brute force search에 취약)


Monoalphabetic cipher

- 시이저 암호기법이 안ㅇ전하다고 볼 수 없으나 임의의 치환을 허용해 키 공간을 급격히 증가 시킴

- 26!의 키

- DES보다 몇 십배 큰 키 공간을 가져 안전해 보이지만 언어의 특성(특정 문자의 빈도수)때문에 안정성이 급격히 떨어진다.


Playfair cipher

- 다중 문자 치환

- 2중 문자를 한 단위로 취급해 치환해 안전도를 높임

- 특정 키워드를 기반으로 하여 5x5 matrix를 만듦

- monoalphabetic cipher에 비해 복잡한 구조를 가지지만 평문의 구조가 많이 드러난다.


Hill cipher

- m개의 평문을 m개의 암호문으로 치환함

- 이때, m개의 선형 방정식에 의해 치환됨

in matrix, C = PK mod 26

P = mod 26


Polyalphabetic cipher

- 평문에 대해 서로 다른 방식의 단일 문자 치환 기법을 사용


Vinenere cipher

- 각 평문자에 대한 암호 문자가 유일한 키워드의 각 문자에 대하여 하나씩 여러 개 존재한다. 따라서 문자 빈도수에 대한 정보가 감춰지지만 평문 구조에 대한 정보가 모두 은폐되는 것은 아니다.

- 여러 가지 동일 문자열 사이의 거리에 대해 공통인가를 알아봄으로써 키워드 길이를 근사하게 추정할 수 있다. 그리고 알려진 빈도 특성을 이용하여 해독한다(Kasiski method)

Key         : d e c p t i v e

plain text : w e a r e d i s

ciphertext: z i c v t w q n 

- Autokey cipher : 반복되지 않은 키워드를 사용하여 Kasiski method에 의한 해독을 방지한다. 키워드와 평문을 연결시켜 키를 만들어 사용하는 기법이다. 하지만 키와 평문이 동일한 문자 빈도를 갖기 때문에 통계적 기법이 적용 가능하다.

Key         : deceptive

plain        : wear...

autokey    : deceptivewear ...


Vernam cipher

- 암호학적 공격에 안전하기 위해 평문과 동일 한 길이의 키를 가진다.

- 평문과 통계적 연관성이 없어야 한다.




One Time Pad

- 메시지와 정확히 같은 길이이고 반복되지 않는 랜덤 키 사용을 제시 함으로써 통계적 관계를 갖지 않는 임의의 키를 출력한다.

- Perfect security를 제공하지만 대용량의 랜덤한 키를 다루기 어렵고 키 분배 및 보호의 문제가 발생한다.


Transposition cipher

- 전치에 의한 암호

- 평문과 같은 빈도를 가진다.


Rail Fence cipher

- ex

plain : meet me

m e m 

  e  t  e

cipher: memete


Row Transposition cipher

- 키의 순서대로 재배치하는 암호화


'컴퓨터보안 > 개념' 카테고리의 다른 글

고전암호기법  (0) 2014.10.20
서론  (0) 2014.10.20
이 댓글을 비밀 댓글로

서론

Posted by 백창
2014.10.20 09:25 컴퓨터보안/개념

Computer Security

 정보 시스템 자원에 대한 무결성과 가용성, 기밀성유지와 같은 목적을 달성하기 위해 자동화된 정보시스템에 적용되는 보호


CIA tiad




Passive attack

 도청, 감시 등 데이터를 조작하지 않고 들여다 보기만 하는것


Active attack

 데이터 스트림을 불법 수정 또는 거짓 데이터를 전달 하는것


'컴퓨터보안 > 개념' 카테고리의 다른 글

고전암호기법  (0) 2014.10.20
서론  (0) 2014.10.20
이 댓글을 비밀 댓글로