Akashic Records

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

오래된글/Java

자바을 이용한 암호학 - 9

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

PLT 4.3 MAC

클래스는 메시지 인증 코드(MAC)에 대한 API를 정의한다. MAC은 비밀키를 공유하는 집단 사이에서 전송되는 정보의 무결성을 검사할 있다. MAC은 공개키/개인키가 아니라 비밀키와 함께 생성된다는 점을 제외하면 디지털 서명과 비슷하다. MAC 클래스는 알고리즘과 무관하며 제공자-기반이다. 정적 getInstance() 팩토리 메소드 하나를 호출하여 희망하는 MAC 알고리즘의 이름을 지정하여 MAC 객체를 얻는다.


“SunJCE"제공자는 ”HmacMD5", "HmacSHA1"이라는 개의 알고리즘을 구현한다.

  • Mac 객체를 얻은 후에는 init() 메소드를 호출하여 SecretKey를 지정하여 Mac 객체를 초기화 한다.

  • Mac 객체를 얻고 초기화 후에는, Mac이 계산될 데이터를 지정한다. 단순히 단일 바이트 배열을 처리 할때는 doFinal()에 전달하고, 스트리밍이나 다양한 위치에 저장된다면 update()를 여러번 호출하여 처리한다.


SecureRandom sr = new SecureRandom();

byte[] keyBytes = new byte[20];

sr.nextBytes(keyBytes);

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

Mac m = Mac.getInstance("HmacSHA1");

m.init(key);

m.update(inputData);

byte[] mac = m.doFinal();


PLT 4.4 서명

java.security.Signature

서명은 두 가지 보안 서비스(인증과 무결성) 즉, 메시지가 변조되어 오지 않는 것과 메시지가 어떤 사람으로부터 보내졌는지를 보장해준다. 서명은 서명한 사람의 개인키를 가지고 암호화한 메시지 축약이다. 서명한 사람의 공개키만이 서명을 복호화 할 수 있으며, 이것이 인증을 제공한다. 메시지 축약이 서명으로부터 복호화한 메시지 축약과 같다면, 무결성 역시 보장되는 것이다.

  • Signature 객체는 정적 팩토리 메소드인 getInstance()중의 하나를 원하는 전자 서명 알고리즘과 선택적으로 알고리즘의 제공자를 지정하면서 호출하여 얻을 수있다.

  • 전자 서명은 본질적으로 공개키 암호화 알고리즘으로 암호화된 메시지 축약이다. 따라서 전자 서명 알고리즘을 지정하려면, 축약 알고리즘과, 암호화 알고리즘을 모두 지정해야한다.

  • 기본 “SUN"제공자에서 지원되는 유일한 알고리즘은 ”SHA1WwithDSA"이다.

  • 전자 서명의 생성을 위한 초기화를 하려면 initSign()을 호출하고 서명 생성을 위한 개인키를 지정해야한다.

  • 서명의 검증을 위한 초기화를 하려면 initVerify()를 호출하고 사인자(signer)의 공개키를 지정해야 한다.

  • Signature 객체가 초기화 되었으면 update()를 한번 이상 호출하여 사인되거나 검증될 바이트를 지정한다.

  • 마지막으로 전자 서명을 생성하기 위해 sign()을 호출하면서 사인이 저장될 바이트 배열을 넘겨준다.


PLT 4.5 암호화

암호화의 종류

  • 대칭 또는 개인키 : 암복호화에 하나의 개인키를 사용한다.

  • 비대칭 또는 공개키 : 개인키로 암호화하고 공개키로 검증한다.

  • 하이브리드(hybrid) : 비대칭 암호는 소위 개인키를 교환하기 위해 사용된다. 개인키는 데이터 암호화 및 복호화를 위해 대칭 암호화와 함께 사용된다.


대칭암호의 종류

  • 블록 암호 : 고정된 크기의 데이터 블록을 암호화 하고 복호화한다.

  • 스트림 암호 : 비트나 바이트의 스트림상에 작동한다.(블록암호화의 CFB모드 사용)


암호 모드

모 드

설 명

비 고

ECB

가장 단순 모든 동일한 평문은 동일한 암호문이 된다.


CBC

ECB의 단점보안 가장 일반적임


PCBC

CBC와 유사


CFBn

블록암호가 스트림처럼 동작하도록한다.


OFBn

CFB모드와 유사



사용예)

Cipher cipher = Cipher.getInstance(“DES/ECB/PKCS5Padding”);

//알고리즘-블록암호화 알고리즘 – 패딩기법


728x90

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

자바을 이용한 암호학 - 11  (0) 2018.04.07
자바을 이용한 암호학 - 10  (0) 2018.04.07
자바을 이용한 암호학 - 8  (0) 2018.04.07
자바을 이용한 암호학 - 7  (0) 2018.04.07
자바을 이용한 암호학 - 6  (0) 2018.04.07
Comments