2016-11-15 16 views
0

그래서 저는 현재 Python을 배우고 있으며 해당 언어의 암호화 방법에 대해 배우고 있습니다. 거기서 hashlib 라이브러리에서 pbkdf2_hmac (hash_name, password, salt, iterations, dklen = None) 함수를 발견했습니다.암호 기반 키 유도 함수 2 반복 2

그러나 "iterations"매개 변수는 예상대로 작동하지 않습니다. 다음의 간단한 코드가 보여 주듯이, 한 번의 반복으로 두 번 함수를 호출하려고하면 두 번의 반복으로 한 번 호출 할 때 다른 대답을 얻습니다. 해시 함수는 결정적이므로 두 방법 모두 동일한 결과를 산출해야합니다.

import hashlib 
a=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",1) 
b=hashlib.pbkdf2_hmac("sha256",a,b"salt",1) 
c=hashlib.pbkdf2_hmac("sha256",b"hallo",b"salt",2) 
print(b) 
print(c) 

누가 잘못되었는지 말해 줄 수 있습니까?

답변

1

PBKDF2의 두 번째 반복은 PBKDF2 (첫 번째 반복)가 아닙니다.

단순화 된 설명은 다음

  • 1 반복 : HMAC(password, salt || 00000001)
  • 2 반복 : HMAC(password, HMAC(password, salt || 00000001))
  • PBKDF2 (PBKDF2) HMAC(HMAC(password, salt || 00000001), salt || 00000001)

참고로, "2 반복"및 " PBKDF2 (PBKDF2) "버전에서는 두 번째 계산에 다른 HMAC 키를 사용하므로 다른 결과가 나타납니다.

"해시 함수가 결정적"인 한, 다음과 같습니다. 동일한 입력을 사용하여 호출하면 동일한 출력을 제공합니다. 기본 알고리즘이 어떻게 작동하는지 오해하여 여러 입력을 제공했습니다.