일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- embedd
- Objective C
- 안드로이드
- apns
- apache
- java
- FlexiblePageView
- Android NDK시스템
- Google V8 Engine
- JavaScript Engine
- Magnify Anim
- PageControl
- SO 파일
- so file
- appbarlayout
- v8 engine xcode build
- sha1 convert hashkey
- 공인인증서 만료일
- IOS10
- Android
- IMAGE
- android log dump
- 공인인증서 정보
- V8 Engine
- Status Bar
- ios
- ios framework
- apk 다운사이징
- 인증서 정보 뽑아내기
- Push
- Today
- Total
caTea 블로그
컴퓨터 암호화 정리 본문
암호화
비대칭키 방식(공개키 방식)
- RSA 알고리즘
- 키교환 알고리즘(대칭키 방식의 비밀키를 암복호화) 및 전자서명(예, 비대칭키 암호화 + 메시지 다이제스트) 등에 사용
- 대칭키 방식의 비밀키의 암호화/복호화, 전자서명, 인증 및 부인방지 용도에 사용
- 공개키 인증 및 암복호화 속도 문제
대칭키 방식(비밀키 방식)
- 스트림 암호화(가변 길이 데이터를 패딩없이 처리, 잘 사용안함)와 블록 암호화(고정된 크기의 블록 단위로 데이터를
- DES(64bit 블록 암호화, 56bit 키, 자바는 64bit(8byte) 키 사용), 3DES(=DESede, 64bit 블록 암호화, 112~168bit 키, 자바는
, AES(128bit 블록 암호화, 128bit(16byte) 키, 미국 표준), AES-256(256bit(32byte) 블록 암호화, 256bit 키)
, SEED(128bit 블록 암호화, 128bit 키) 알고리즘
- 자바6 이상부터 256bit 지원(http://lyb1495.tistory.com/89)
- DES, 3DES가 가장 느림
- 비밀키(공개키) 하나로 암호화와 복호화
- 주로 평문을 암호화하는 데 사용
- 비밀키가 외부에 노출되면 암호화는 무용지물
패딩(Padding)
- 데이터를 특정 크기로 맞추기 위해 특정 크기보다 부족한 부분을 무의미한 문자로 채워넣는 기법
- 암호화시 무조건, 항상, 반드시 수행
PKCS#5
- Public Key Crytography Standard
- Password-based Encryption Standard
- 패스워드로 표현할 수 있는 키를 사용하는 암호화 표준
- 현대의 공인인증 방식은 PKCS#5 표준에 따라 개인 패스워드가 근간
- 패스워드란 영문, 숫자, 특수문자를 포함, 키보드 상에서 [input type="password"] 형식으로 쓸 수 있는 모든 문자를 말함
1바이트로 표현 가능한 모든 문자, 즉 ASCII 코드로 0 ~ 255(이진수로 00000000 ~ 11111111)에 해당
앞 부분의 컨트롤 문자와 뒷부분의 확장 문자 코드를 빼면 32 ~ 126 사이의 문자 코드만 해당
이걸 이진수로 표현하면 최대 8자리의 숫자로 표현되기 때문에 8진 문자열(Octet string)이라고도 불림
8진 문자열을 사용하는 것에 대한 표준이 바로 PKCS#5
- 평문의 길이가 8바이트(64비트)의 배수를 기준으로 모자라는 수만큼 숫자를 채워 8바이트의 배수로 길이를 맞추는 작업
- DES, 3DES 암호화 알고리즘에서 사용
- PBKDF2 : 암호기반 키 파생 함수, 암호에서 비밀키를 파생하기 위한 표준 메커니즘
PKCS#7
- 128비트(16바이트) 이상 블록 암호화(AES, AES-256, SEED 등) 알고리즘의 등장으로 인하여 PKCS#5에서 확장된 표준.
- 평문의 길이가 16바이트(128비트)의 배수를 기준으로 모자라는 수만큼 숫자를 채워 16바이트의 배수로 길이를 맞추는 작업
- 블록 크기가 128비트일 경우 PKCS#5와 PKCS#7은 서로 호환됨
모드(Feedback Modes, 블록 암호화 운영 모드) / IV(초기화 벡터: Initialization Vector)
ECB 모드
IV를 사용하지 않고, 즉 XOR 연산없이 각 블록을 암호화만 하는 모드
CBC(Cipher-Block Chaining) 모드
- 블록 암호화 운영 모드 중 보안성이 제일 높아 가장 많이 사용
- 최초 평문 1블록과 IV를 XOR 연산한 다음 암호화하고
다음 평문 1블록은 앞에서 암호화된 결과 블록과 XOR 연산하고 다시 암호화하는 과정을 끝까지 반복하는 방식
평문 마지막 블록은 패딩된 블록
AES 암호화(일반적인 암호화 개발 순서)
Key 생성(세션 처리?) - 문자열 -> UTF-8 인코딩 -> MD5(128bit)/SHA2-256(256bit) 해싱
I.V 생성(항상 신규 생성?) - 문자열 -> UTF-8 인코딩 -> MD5(128bit) 해싱
암호화 - 평문 -> UTF-8 인코딩 -> PKCS#7 -> 128/256비트 AES(CBC) 암호화 -> Base64 인코딩 -> 암호문
PBKDF2
- 암호기반 키 파생 함수, 암호에서 비밀키를 파생하기 위한 표준 메커니즘
- 패스워드를 메시지 다이제스트
- 패스워드의 복잡도를 임의로 높여주기 위해 salt라고 표현하는 난수 dummy 값(32바이트 이상) 추가
- 솔트(salt)는 단방향 해시 함수에서 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열
- 위 과정을 1000번 이상 반복(iteration)
- ((패스워드 + SALT) + Hashing) * ITERATION -> 키 스트레칭
- 비밀키 = PBKDF2(PRF, Password, Salt, c, DLen)
PRF: 난수(예: HMAC)
Password: 사용자 패스워드
Salt: 암호학 솔트(사용자마다 다른 32바이트 이상 권장)
c: 원하는 iteration 반복 수(사용자마다 다른 1000 이상 권장)
DLen: 원하는 비밀키 길이, 단위 bit
HMAC(무결성 검사)
- Hash 함수를 사용하여 MAC(메시지 인증 코드)를 생성하는 방법
- 비밀키 + 메시지 다이제스트, 오직 동일한 비밀키를 가진 쪽에서만 전달받은 메시지의 무결성을 검사
- HMAC-MD5(MD5 : 128비트), HMAC-SHA-1(SHA-1 : 160비트)
'util' 카테고리의 다른 글
jar 압축풀기, 압축하기 (0) | 2018.07.02 |
---|---|
공인인증서에서 데이터 뽑아내기 (0) | 2018.05.30 |
mac sha1 string convert hash key (0) | 2018.01.10 |
tomcat console log 한글처리 (0) | 2016.12.12 |
소프트웨어 라이센스 정리 (0) | 2016.05.16 |