Akashic Records

자바을 이용한 암호학 - 5 본문

오래된글/Java

자바을 이용한 암호학 - 5

Andrew's Akashic Records 2018. 4. 7. 23:26
728x90

Chapter 3 Key Management


PLT 3.1 Key Class

java.security.Key 인터페이스

암호화 키를 캡슐화한 인터페이스이다.

주요 Method :

- public String getAlgorithm() : 키가 사용된 암호 알고리즘 이름을 리턴.

- public byte[] getEncoded() : 키의 암호화 값을 구할 있다.

- public String getFormat() : 암호화 하는데 사용된 포맷의 이름을 리턴한다.

자식 인터페이스:

- java.security.PublicKey,

- java.security.PrivateKey,

- javax.crypto.SecretKey


java.security.KeyPair 클래스

비대칭키 한쌍(공개키, 개인키)을 캡슐화 한다.

주요 Method :

- publicKeyPair(PublicKey publicKey, PrivateKey, privateKey) : 주어진 공개키와 개인키로 KeyPair를 생성한다.

- public PublicKey getPublic() : 공개키를 리턴한다.

- public PrivateKey getPrivate() : 개인키를 리턴한다.


PLT 3.2 Key Generator

javax.crypto.KeyGenerator

대칭키 방식

주요 Method :

- public final SecretKey generateKey() : 새로운 랜덤 SecretKey를 생성한다.

- public String getAlgorithm() : KeyGenerator 객체에 사용된 알고리즘의 이름을 리턴합니다.

- public static KeyGenerator getInstance(.String algorithm) : 주어진 알고리즘으로 인스턴스 생성

- pubic static KeyGenerator getInstance(String algorithm, String provider) : 주어진 알고리즘과 프로바이터로 인스턴스 생성

- pubic Provider getProvider() : 사용된 프로바이터 리턴

- public void init(AlgorithmParameterSpec params) : 제공된 파라미터를 사용하여 초기화 한다.

- public void init(AlgorithmParameterSpec params, SecureRandom random) : 제공된 파라미터를 사용하여 초기화 한다.

- public void init(int keysize) : 주어진 크기로 키를 생성하기 위하여 초기화한다.

- public void init(int keysize, SecureRandom random) : 주어진 키와 랜덤소스로 초기화 한다.

- public void init(java.security.SecureRandom random) : 주어진 랜덤소스로 초기화 한다.

KeyGenerator kg = KeyGenerator.getInstance("DES");

kg.init(new SecureRandom());

SecretKey key = kg.generateKey()


java.security.KeyPairGenerator

비대칭 방식 key Pair 생성

- public KeyPair generateKeyPair () : key 페어를 생성합니다.

- public final KeyPair genKeyPair () : key 페어를 생성합니다.

- public String getAlgorithm () : key 페어 제네레이터의 알고리즘의 표준명을 돌려줍니다.

- public static KeyPairGenerator getInstance (String algorithm) : 지정된 다이제스트 알고리즘을 구현하는 KeyPairGenerator 오브젝트를 작성합니다.

- public static KeyPairGenerator getInstance (String algorithm, String provider) : 지정된 프로바이더로부터 지정된 알고리즘이 사용 가능한 경우에, 프로바이더가 제공한 알고리즘을 구현하는 KeyPairGenerator 오브젝트를 작성합니다.

- public final Provider getProvider () : 열쇠 페어 제네레이터 오브젝트의 프로바이더를 돌려줍니다.

- pubic void initialize (AlgorithmParameterSpec params) : 제공된 파라미터를 사용하여 KeyPairGenerator를 초기화 한다.

- public void initialize (AlgorithmParameterSpec params, SecureRandom random) : 제공된 파라미터를 사용하여 KeyPairGenerator를 초기화 한다.

- public void initialize (int keysize) : 랜덤 비트의 소스 역할을 하는 새로운 SecureRandom을 생성하는 것을 제외하고 임의의 사이즈에 대하여 key 페어 제네리이터를 초기화합니다.

- pubic void initialize (int keysize, SecureRandom random) : 제공된 랜덤 비트 소스를 사용하여 임의의 사이즈 대하는 key 페어 제네레이터를 초기화합니다.

KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA");

kpg.initialize(1024);

KeyPair pair = kpg.getKeyPair();


PLT 3.3 Key 해석기

키를 저장하는 방법 중 하나는 키를 직렬화 하여 저장하는 것과 단순히 바이트의 배열과 같은형태로 키를 저장하거나 전송하는 방법이 있다. 키 객체를 바이트로 또는 역으로 변환하는 방법이 다음의 클래스에 정의 되어있다.


javax.crypto.spec.SecretKeySpec

바이트 배열을 비밀키로 변환하는 가장 간단한 방법 대칭키에서만 사용됩니다.

주요 Method :

- SecretKeySpec(byte[] key, int offset, int len, String algorithm) : offset과 제공된 바이트의 배열의 len 바이트를 사용하여 SecretKeySpec을 생성한다. 키는 제공된 알고리즘을 따른다.

- SecretKeySpec(byte[] key, String algorithm) : 제공된 바이트 배열을 사용하여 SecretKeySpec을 생성한다. 키는 제공된 알고리즘을 따른다.

SecureRandom sr = new SecureRandom();

byte[] keyBytes = new byte[20];

sr.nextBytes(keyBytes);

SecretKey key = new SecretKeySpec(keyBytes, "DES");


javax.crypto.SecretKeyFactory

주요 Method :

- public static final SecretKeyFactory getInstance(String algorithm) : 주어진 알고리즘에 대하여 새로운 SecretKeyFactory를 생성한다 알고리즘은 “DES"와 같은 대칭 암호 알고리즘이다.

- pubic static final SecretKeyFactory getInstance(String algorithm, String provider) : 주어진 프로바이더로 SecretKeyFActory를 생성한다.

- public final SecretKey generateSecret(KeySpec keySpec) : KeySpec를 SecretKey로 변환하기 위하여 사용된다.

public SecertKey makeDESKey(byte[] input, int offset)

throws NoSuchAlgorithmException, InvalidkeyException, InvalidkeySpecException{

SecretKeyFactory desFactory = SecretKeyFactory.getInstance("DES");

KeySpec spec = new DESKeySpec(input, offset);

return desFactory.generateSecret(spec);

}


- public final KeySpec getKeySpec(SecretKey key, java.lang.Class keySpec) : 주어진 SecretKey로부터 KeySpec을 생성한다.

Public byte[] makeBytesFromDESKey (SecretKey key)

throw NoSuchAlgorithmException, InvaildKeySpecException {

SecretKeyFactory desFactory = SecretKeyFactory.getInstance("DES");

DESKeySpec spec =

(DESKeySpec)desFactory.getKeySpec(Key, DESKeySpec.class);

return spec.getKey();

}


java.security.KeyFactory

주요 Method :

- public static final KeyFactory getInstance (String algorithm) : 지정된 다이제스트 알고리즘을 구현하는 KeyFactory 오브젝트를 작성합니다. 알고리즘 이름은 비대칭 암호 알고리즘 이름이거나 “DSA"와 같은 서명 알고리즘 이어야 합니다.

- public static final KeyFactory getInstance (String algorithm, String provider) : 지정된 프로바이더로부터, 지정된 알고리즘의 KeyFactory 오브젝트를 작성합니다.

- public final PrivateKey generatePrivate (KeySpec keySpec) : 지정된 Key Spec으로부터 개인키를 생성하는데 사용

- public final PublicKey generatePublic (KeySpec keySpec) : 지정된 Key Spec으로부터 공개키를 생성하는데 사용

public final KeySpec getKeySpec (Key key, Class keySpec) : 주어진 키로부터 키 스펙을 생성한다.


728x90

'오래된글 > Java' 카테고리의 다른 글

자바을 이용한 암호학 - 7  (0) 2018.04.07
자바을 이용한 암호학 - 6  (0) 2018.04.07
자바을 이용한 암호학 - 4  (0) 2018.04.07
자바을 이용한 암호학 - 3  (0) 2018.04.07
자바을 이용한 암호학 - 2  (0) 2018.04.07
Comments