2011-01-21 44 views
13

Tôi muốn biết thời gian toán học cần thiết để bẻ khóa dựa trên các bộ ký tự khác nhau.Có bao nhiêu băm SHA256 có thể tính toán máy tính hiện đại?

Ví dụ: chỉ sử dụng 7 ký tự, ký tự chữ cái US-ASCII, chúng tôi biết rằng có 26 các chuỗi có thể được sử dụng. Biết bao nhiêu trong số này có thể được tạo ra bởi một máy tính mỗi phút sẽ cho tôi một ý tưởng về việc phải mất bao lâu để tạo ra tất cả các băm có thể và crack một số băm ký tự 7 (các cuộc tấn công sinh nhật sang một bên). Ví dụ, lấy số ở trên, nếu lõi tứ hiện đại có thể tạo ra 1 triệu băm mỗi phút, thì sẽ mất 8031810176/1000000/60 = 133.86 giờ để tìm tất cả các băm có thể trong phạm vi đó.

Ngoài ra, làm thế nào để chip Intel Bridge mới của Intel phát hành AES gốc?

Trả lời

10

Tôi đã viết thử nghiệm này trong C bằng cách sử dụng triển khai OpenSSL SHA256.

#include <stdio.h> 
#include <string.h> 
#include "openssl/sha.h" 

// http://stackoverflow.com/questions/4764608/generate-all-strings-under-length-n-in-c/4764686#4764686 
int inc(char *str) { 
    if (!str[0]) return 0; 

    if (str[0] == 'z') { 
     str[0] = 'a'; 
     return inc(str + sizeof(char)); 
    } 

    str[0]++; 
    return 1; 
} 

unsigned char buffer[65]; 
char* hashstring(char *str, int len) { 
    char hash[SHA256_DIGEST_LENGTH]; // the openssl hash 
    SHA256_CTX sha256; 
    int i; // counter 

    SHA256_Init(&sha256); 
    SHA256_Update(&sha256, str, len); 
    SHA256_Final(hash, &sha256); 

    for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { 
     sprintf(buffer + (i * 2), "%02x", hash[i]); // convert openssl hash to mortal human string 
    } 

    return buffer; 
} 

int main(int argc, char *argv[]) { 
    int N = 4; // max length string 
    char str[N+1]; // the string holder 
    int i; // counter 

    unsigned int tot = 0; // number of hashes calculated 

    for (i = 0; i < N; i++) str[i] = 'a'; 
    str[N] = 0; 

    do { 
     hashstring(str, N); 
     tot++; 
    } while(inc(str)); 

    printf("%d\n", tot); 
} 

Compile:

gcc -lcrypto -O3 -o test test.c 

Và kết quả (Tôi biết, tôi không phải là rất sáng tạo với computernames):

[email protected]:~/c/sha256$ time ./test 
11881376 

real 3m2.431s 
user 3m2.335s 
sys 0m0.008s 

Vì vậy, đó là 11881376/182.4 = 65139 băm mỗi giây. Sau đó, nó là 26^7/101821/3600 = 34 giờ để tính toán tất cả các băm. Xin lưu ý, tất cả điều này đã được thực hiện trên một CPU quad-core Q6600 trong một ứng dụng đơn luồng và loại trừ việc viết các băm để tập tin.

EDIT

Woops, tôi đã tính toán tất cả các giá trị băm của chuỗi với N ký tự và dưới. Đã sửa và cập nhật dữ liệu.

+0

để - quay lên 4 chương trình của bạn và bạn có thể tạo khoảng 400k băm/giây. – nos

+0

Tôi đã tạo ra các chuỗi sai, nhưng bây giờ nó là OK. Tôi cũng đã may mắn trên một lần chạy (lưu ý, đây là một PC, rất nhiều thứ khác cũng chạy). – orlp

+0

Cảm ơn, tôi tình cờ có Q8200 vì vậy điều này là rất áp dụng cho bản thân mình. Tôi tự hỏi làm thế nào nhanh chóng một CPU Sandy Bridge mới có thể di chuyển. – Xeoncross

8

Hãy nhớ rằng GPU có thể băm nhanh hơn 50x - 100x so với CPU. Khó hơn để lập trình, nhưng hiệu quả hơn. Xem www.bitcointalk.com để biết số. Tôi biết tôi làm 622 triệu SHA-256 mỗi giây trên Radeon HD5830.

+1

"Nếu bạn định làm gì đó, hãy làm tốt" - GPU – Xeoncross

Các vấn đề liên quan