17

さまざまな文字セットに基づいてハッシュを解読するのに必要な数学的時間を知りたいです。

たとえば、7 文字の US-ASCII アルファベット文字のみを使用すると、26 7の可能なシーケンスが使用できることがわかります。コンピューターが 1 分間に生成できるこれらの数を知ることで、考えられるすべてのハッシュを生成し、特定の 7 文字のハッシュをクラックするのにかかる時間を知ることができます (誕生日攻撃は別として)。

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

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

4

2 に答える 2

13

このテストは、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

そして結果(私は知っています、私はコンピューター名であまり創造的ではありません):

nightcracker@nightcracker-pc:~/c/sha256$ time ./test
11881376

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

つまり、11881376 / 182.4 = 651391 秒あたりのハッシュ数です。その後、26^7/101821/3600 = 34すべてのハッシュを計算するのに数時間かかります。これはすべて、シングルスレッド アプリケーションの Q6600 クアッドコア CPU で実行され、ファイルへのハッシュの書き込みは除外されていることに注意してください。

編集

おっと、N 文字以下の文字列のすべてのハッシュを計算していました。修正し、データを更新しました。

于 2011-01-22T00:50:08.640 に答える
10

GPU は CPU よりも 50 倍から 100 倍高速にハッシュできることに注意してください。プログラミングは難しくなりますが、より効率的です。数値については、www.bitcointalk.com を参照してください。私は Radeon HD5830 で毎秒 6 億 2200 万の SHA-256 を実行していることを知っています。

于 2012-03-04T03:02:10.887 に答える