Сколько хэшей SHA256 может вычислить современный компьютер?
Я хочу знать математическое время, необходимое для взлома хэшей на основе разных наборов символов.
например, используя только 7 букв, US-ASCII алфавитные символы мы знаем, что есть 267 возможных последовательностей, которые могут быть использованы. Зная, сколько из них может быть сгенерировано компьютером каждую минуту, я бы дал представление о том, сколько времени потребуется, чтобы сгенерировать все возможные хэши и взломать определенный 7-символьный хэш (атаки на день рождения в сторону!--7-->).
например, принимая число выше, если современное четырехъядерное ядро может генерировать 1 миллион хэшей каждую минуту, это займет 8031810176 / 1000000 / 60 = 133.86
часов, чтобы найти все возможные хэши в этом диапазоне.
кроме того, как новые чипы Intel Sandy Bridge с родными AES играют в это?
2 ответов
я написал этот тест на C, используя реализацию 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
и результаты (я знаю, я не очень творческий с computernames):
nightcracker@nightcracker-pc:~/c/sha256$ time ./test
11881376
real 3m2.431s
user 3m2.335s
sys 0m0.008s
так вот 11881376 / 182.4 = 65139
хэшей в секунду. Тогда это 26^7/101821/3600 = 34
часы для вычисления всех хэшей. Обратите внимание, что все это было сделано на четырехъядерном процессоре Q6600 в однопоточном приложении и исключено написание хэшей файл.
редактировать
Woops, я вычислял все хэши строк с N символами и ниже. Исправлены и обновлены данные.
помните, что GPU может хэшировать 50x-100x быстрее, чем CPU. Его сложнее программировать, но более эффективно. Смотри www.bitcointalk.com для чисел. Я знаю, что делаю 622 миллиона SHA-256 в секунду на Radeon HD5830.