일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- NIO
- 유닉스
- flet
- oracle
- 리눅스
- GPT-4's answer
- 고전역학
- python
- 인프라
- chatGPT's answer
- 코틀린
- 자바암호
- android
- 자바
- 파이썬
- 데이터베이스
- spring integration
- 소프트웨어공학
- kotlin
- Java
- 역학
- spring data jpa
- write by chatGPT
- write by GPT-4
- 자바네트워크
- 웹 크롤링
- Database
- 시스템
- jpa
- JVM
- Today
- Total
기억을 지배하는 기록
자바을 이용한 암호학 - 9 본문
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”); //알고리즘-블록암호화 알고리즘 – 패딩기법 |
'오래된글 > 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 |