Первое, что я смотрел на это криптография. Шифрование является хорошей вещью для обеспечения конфиденциальности и безопасности. Преобразование или хеширования выходных строк, делает его гораздо более трудным для посторонних, чтобы просмотреть или использовать информацию. Более высокие уровни шифрования дополнительных трудностей в манипулировании информации.
Bitcoin использует библиотеку SHA256 для крипто. Алгоритм шифрования 256 бита является достойным шифрованием силы. В этом случае, однако, он не использует истинные 256 бит. Это фактически использует слои 16 бит, 32 бит и 64 бита. 16 бит на самом деле слой хеши из 20 бит. Общий выход для всех слоев в окрестностях 256 бит, а общий объем (сумма), не то же самое, как истинный 256 битовый выход. Это значительно легче взломать один слой 20, 32 и 64 бит по сравнению с одиночным 256 битовой строки.
Использование открытого источника крипто хорошо для отладки, в целях обучения, выявление общих ошибок и etcetra. Но, будучи обоюдоострым мечом, он также позволяет гнусные программистам получить необходимую им информацию, чтобы взломать его. В случае SHA256, то мясорубка работает как положено. Процесс преобразования адекватно преобразует выходной сигнал. Но, то Chunker, что делит выход на куски для преобразования, только на самом деле куски из 30 и 60 бита. Оставляя 2 и 4 бита соответственно, чтобы висеть в подвешенном состоянии. Эти биты потенциально передаются через сеть в незашифрованном виде.
Некоторые утверждают, что это только последние 4 бита, и не будет иметь значения. Ну, это только лотерея, и вы получили последние 4 цифры выигрышного номера бесплатно. Вы только должны придумать еще несколько цифр, чтобы ударить его большим. Предполагая, что последний 2 и 4 бита, оставшегося от Chunker включены в предыдущем бите для преобразования, то последний фрагмент становится 3 и 5 бит, вместо 1 бит в то время, которое требуется преобразовать. Вполне возможно, что последний кусок отбрасывается за нарушения, при этом оставаясь в незашифрованном виде. Или он автоматически преобразуется, но не улучшает шифрование или уменьшить вероятность успешной трещины. Это легко фиксируется перекодирования Chunker на самом деле кусок, чтобы в полной мере 32 и 64 битов, как показано на выходе из источника. Там также может быть незначительными корректировками для обеспечения эффективности и меньшего потребления ресурсов, но они не являются каким-либо видом обязательных изменений и не требуются для этого криптографического работать должным образом.
Вот источник для заголовка Bitcoin. Как вы можете видеть, это ясно использует 16, 32 и 64-битных выходов.
// Copyright (с) 2014 Разработчики Bitcoin Основные
// Распространяется под лицензией MIT, см сопровождающего
// файл КОПИРОВАНИЕ или http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CRYPTO_COMMON_H
#define BITCOIN_CRYPTO_COMMON_H
#if определенной (HAVE_CONFIG_H)
#включают "Bitcoin-config.h"
#endif
#включают
#включают "Compat / endian.h"
uint16_t статический встроенный ReadLE16 (Const символ без знака * PTR)
{
вернуться le16toh (* ((uint16_t *) PTR));
}
uint32_t статический встроенный ReadLE32 (Const символ без знака * PTR)
{
вернуться le32toh (* ((uint32_t *) PTR));
}
uint64_t статический встроенный ReadLE64 (Const символ без знака * PTR)
{
вернуться le64toh (* ((uint64_t *) PTR));
}
недействительный статический встроенный WriteLE16 (неподписанный символ * PTR, uint16_t х)
{
* ((Uint16_t *) PTR) = htole16 (х);
}
недействительный статический встроенный WriteLE32 (неподписанный символ * PTR, uint32_t х)
{
* ((Uint32_t *) PTR) = htole32 (х);
}
недействительный статический встроенный WriteLE64 (неподписанный символ * PTR, uint64_t х)
{
* ((Uint64_t *) PTR) = htole64 (х);
}
uint32_t статический встроенный ReadBE32 (Const символ без знака * PTR)
{
вернуться be32toh (* ((uint32_t *) PTR));
}
uint64_t статический встроенный ReadBE64 (Const символ без знака * PTR)
{
вернуться be64toh (* ((uint64_t *) PTR));
}
недействительный статический встроенный WriteBE32 (неподписанный символ * PTR, uint32_t х)
{
* ((Uint32_t *) PTR) = htobe32 (х);
}
недействительный статический встроенный WriteBE64 (неподписанный символ * PTR, uint64_t х)
{
* ((Uint64_t *) PTR) = htobe64 (х);
}
#endif // BITCOIN_CRYPTO_COMMON_H
Еще один пример, взятый из источника, является выходом одного из слоев, как 20 бит. В другом месте в источнике она начинается, как 16 бит слоя с, но на самом деле выводит до 20. Это нормально.
// Copyright (с) 2014 Разработчики Bitcoin Основные
// Распространяется под лицензией MIT, см сопровождающего
// файл КОПИРОВАНИЕ или http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CRYPTO_SHA1_H
#define BITCOIN_CRYPTO_SHA1_H
#включают
#включают
/ ** На мясорубке класса для SHA1. * /
класс CSHA1
{
частный:
uint32_t с [5];
неподписанный символ BUF [64];
size_t байт;
общественности:
статического сопзЬ size_t OUTPUT_SIZE = 20;
CSHA1 ();
CSHA1& Write (Const символ без знака * данные, size_t LEN);
Доработка недействительный (неподписанный символ хэш [OUTPUT_SIZE]);
CSHA1& Сброс();
};
#endif // BITCOIN_CRYPTO_SHA1_H
Здесь 32 бит на выходе:
// Copyright (с) 2014 Разработчики Bitcoin Основные
// Распространяется под лицензией MIT, см сопровождающего
// файл КОПИРОВАНИЕ или http://www.opensource.org/licenses/mit-license.php.
#ifndef BITCOIN_CRYPTO_SHA256_H
#define BITCOIN_CRYPTO_SHA256_H
#включают
#включают
/ ** На мясорубке класса для SHA-256. * /
класс CSHA256
{
частный:
uint32_t с [8];
неподписанный символ BUF [64];
size_t байт;
общественности:
статического сопзЬ size_t OUTPUT_SIZE = 32;
CSHA256 ();
CSHA256& Write (Const символ без знака * данные, size_t LEN);
Доработка недействительный (неподписанный символ хэш [OUTPUT_SIZE]);
CSHA256& Сброс();
};
#endif // BITCOIN_CRYPTO_SHA256_H
Используемый алгоритм работы. Библиотека используется, что криптография основана на, работает как положено. Названия были сделаны, чтобы быть немного вводит в заблуждение, но более чем вероятно, что это попытаться удержать потенциальных крекеры от попыток взломать шифрование и получить. Поскольку это касается денег, я бы рекомендовал крипто выписана чтобы быть полным 256 бит слой, или даже использовать 512 бит. На самом деле, все, что меньше, чем 256 бит могут быть взломаны ребенком с брутфорсер и временем.
Все это можно найти на Github. Посмотрите здесь для источника криптографической и убедитесь сами: https://github.com/bitcoin/bitcoin/tree/master/src/crypto