2011-01-21 7 views
13

異なる文字セットに基づいてハッシュを分解するために必要な数学的な時間を知りたい。最新のコンピュータでSHA256ハッシュをいくつまで計算できますか?

たとえば、US-ASCIIアルファベット文字を7文字のみ使用すると、使用可能な可能な配列26 が存在することがわかります。どのくらいの時間がコンピュータによって生成されるかを知ることで、可能なすべてのハッシュを生成し、特定の7文字のハッシュを解読するのにどれくらいの時間がかかるかを知ることができます(誕生日の攻撃を除いて)。

たとえば、最新のクワッドコアで毎分100万回のハッシュが生成された場合、その範囲内で可能なすべてのハッシュを見つけるには、8031810176/1000000/60 = 133.86時間かかります。

また、ネイティブAESを搭載した新しいSandy Bridge Intelチップはどのようにこれに影響しますか?

答えて

10

私はOpenSSL SHA256実装を使用してCでこのテストを書いています。

#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); 
} 

コンパイル:

gcc -lcrypto -O3 -o test test.c 

と結果(私が知っている、私はcomputernamesと非常に創造的ではないよ):

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

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

だから、毎秒11881376/182.4 = 65139ハッシュです。次に、すべてのハッシュを計算するのは26^7/101821/3600 = 34時間です。 Q6600クアッドコアCPUをシングルスレッドアプリケーションで実行し、ハッシュをファイルに書き込むことを除いています。

EDIT

Woops、私はNの文字以下ですべての文字列のハッシュを計算しました。訂正され、データが更新されました。

+0

あなたのプログラムのうちの4つをスピンアップし、約400kハッシュ/秒を生成することができます。 – nos

+0

私は間違った文字列を生成していましたが、今は問題ありません。私はまた1つのランで明らかに運が良かった(これはPCであり、他にも多くのものが走っていることに注意してください)。 – orlp

+0

ありがとう、私はQ8200を持っているので、これは自分自身に非常に当てはまります。新しいSandy Bridge CPUがどれくらい速く動くのだろうか。 – Xeoncross

8

GPUは、CPUよりも50倍〜100倍の速さでハッシュできます。プログラムは難しいが、より効率的です。数字については、www.bitcointalk.comを参照してください。私はRadeon HD5830で622百万SHA-256秒を実行することを知っています。

+1

「もし何かするつもりなら、うまくやるよ」 - GPU – Xeoncross

関連する問題