2010-03-17 11 views
9

Để tạo khóa chính hợp lệ theo cặp cho mạng WPA2, bộ định tuyến sử dụng thuật toán PBKDF2-HMAC-SHA1. Tôi hiểu rằng chức năng sha1 được thực hiện 4096 lần để lấy được PMK, tuy nhiên tôi có hai câu hỏi về quá trình này.PBKDF2-HMAC-SHA1

Xin lỗi mã giả.

1) Cách nhập vào phiên bản đầu tiên của hàm SHA1 được định dạng? SHA1 ("network_name" + "network_name_length" + "network_password")

Được định dạng theo thứ tự đó, đó có phải là giá trị hex của tên mạng, độ dài và mật khẩu hoặc ASCII thẳng không?

Sau đó, từ những gì tôi thu thập thông báo 160 bit nhận được được đưa thẳng vào một vòng băm khác mà không cần thêm bất kỳ muối nào. Như thế này: SHA1 ("160 bit tiêu hóa từ vòng băm cuối cùng") Tăng lên và lặp lại.

2) Khi điều này xảy ra 4096 lần, 256 bit đầu ra được sử dụng làm khóa chính hai chiều. Những gì tôi không hiểu là nếu SHA1 sản xuất 160bit đầu ra, làm thế nào để thuật toán đến 256bits cần thiết cho một khóa?

Cảm ơn sự giúp đỡ.

Trả lời

8

vâng thats quyền, các thuật toán để tạo một khóa nhị phân cho một mạng WPA là:

key = PBKDF2 (cụm mật khẩu, ssid, 4096, 256)

PBKDF2 được mô tả trong http://www.ietf.org/rfc/rfc2898.txt

Nó sử dụng thuật toán HMAC để tạo ra một thông báo đầu vào. HMAC có thể sử dụng bất kỳ hàm băm nào, ở đây các cuộc gọi spec cho SHA1 như bạn đã đề cập. Băm được thực hiện trên một trạng thái trung gian trong các thuật toán HMAC:

H(K XOR opad, H(K XOR ipad, text)) 

(H = các hàm băm chọn, K là cụm từ mật khẩu, văn bản sẽ ssid)

quá trình HMAC này được lặp lại 4096 lần PBKDF2.

HMAC thuật toán: http://www.ietf.org/rfc/rfc2104

Có một nguồn ví dụ ở đây các phát sinh một chìa khóa:

https://www.codeblog.org/viewsrc/openssl-engine-0.9.6a/crypto/evp/p5_crpt2.c

int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, 
    80:       unsigned char *salt, int saltlen, int iter, 
    81:       int keylen, unsigned char *out) 

muối là SSID, vượt qua là mật khẩu.