1. PBKDF2의 이해
- 의사 난수 기능을 적용하여 키 파생
- 파생된 키 길이는 제한 없음
- 그러나 파생된 키의 최대 유효 검색 공간은 기본 의사 난수 함수의 구조에 의해 제한 될 수 있다.

2. PBKDF2의 동작과정


INT(i) : i를 4byte로 인코딩
3. PBKDF2 소스코드 구현
[ 모듈 이용 ]
|
1
2
3
4
5
6
7
|
### 모듈 이용 ###
from hashlib import pbkdf2_hmac
import base64
K = pbkdf2_hmac('sha1', password='password'.encode(), salt='salt'.encode(), iterations=1000, dklen=32)
print('[ 모듈 이용 ] DK =', base64.b64encode(K).decode())
|
cs |
[ 동작원리 이용 ]
|
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
|
### 동작원리 이용 ###
import hashlib
import hmac
import base64
import math
import operator
def pbkdf2(password, salt, iteration, dklen):
hlen = hmac.new(password, msg=None, digestmod=hashlib.sha1).digest_size
len = math.ceil(dklen/hlen)
r = dklen-(len-1)*hlen
DK = b''
for i in range(1, len+1):
T = bytes(hlen)
INT = i.to_bytes(4, byteorder='big')
U_0 = salt + INT
for j in range(iteration):
U_N = hmac.new(password, U_0, hashlib.sha1).digest()
T = bytes(map(operator.xor, T, U_N))
U_0 = U_N
if (i == len):
DK += T[:r]
return DK
DK += T
return DK
DK = pbkdf2('password'.encode(), 'salt'.encode(), 1000, 32)
print('[ 동작원리 이용 ] DK =', base64.b64encode(DK).decode())
|
cs |
=== 실행결과 ===

== Github 소스코드 파일 ==
'Digital Forensic > Android' 카테고리의 다른 글
| [ PBKDF1 ] Password-Based Key Derivation Function 1 동작과정과 소스코드 구현 (0) | 2020.09.12 |
|---|---|
| FBE(File-Based Encryption)의 동작과정 (0) | 2020.09.10 |
| FBE(File-Based Encryption)의 이해와 사용된 암호기술 (0) | 2020.09.10 |
| FDE(Full-Disk Encryption)의 동작과정 (0) | 2020.09.10 |
| FDE(Full Disk Encryption)의 이해와 사용된 암호기술 (0) | 2020.09.10 |























