ru24.pro
«Фрилансим»
Октябрь
2024
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
29
30
31

Расчет на CUDA ядрах SECP-256k1, Keccak-256

0
Необходимо разработать небольшое приложение рассчитывающее хэш на CUDA ядрах. Все расчеты и поиск совершать на GPU.
Результатом выполнения задания является работающее приложение для Ubuntu 20/22/24, исходный код и инструкция по сборке/компиляции.

- Программа получает аргументами номер видеокарты и начальный hex хэш. Пример: ./calc 0 f6406a1636543c04256b64e7d38002a13cf26c645cecf1cf7287e5800000000b
- Загружает файла с исходными данными (набор сортированных чисел uint64) в память GPU
- На GPU рассчитывает uint64 из хэша
- С помощью бинарного поиска ищет наличие в массиве uint64, если число есть в массиве то вывести в консоль хэш из которого получили число
- Увеличивает хэш на 1. Пример: f6406a1636543c04256b64e7d38002a13cf26c645cecf1cf7287e5800000000c

Расчёт uint64:
1. Приватный ключ -> открытый ключ (ECDSA на SECP-256k1).
2. Открытый ключ -> хэширование (Keccak-256).
3. Берем последние 20 байт хэша и получаем адрес.
4. Получаем uint.
4.1. Пример на golang: binary.BigEndian.Uint64([]byte{хэш[0], хэш[1], хэш[2], хэш[3], хэш[16], хэш[17], хэш[18], хэш[19]})
4.2. Пример на js: BigInt(`0x${хэшСтрока.substr(0, 8)}${хэшСтрока.substr(32)}`)
4.3. Хэш c3ea4627b15cfdb6869f35ca150f93e6dee40e32 соответствует числу 14117173119003397682

Все алгоритмы под CUDA уже существуют, надо собрать наиболее шустрый вариант.

Пример вывода в консоль:
```text
GPU: 0
Start: 9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2c98763
9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2c98763
9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2c9b1c6
9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2c9dc29
9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2ca068c
9f6eb28ac682aff612f1480a374f86c3a5b4b4e531da2a4b2edca050a2ca30ef
```

При файле:
```text
665827009123879698
5583111258928654999
6419952329182340394
7595130425839639305
15461504444051265698
```