Поскольку SHA-3, кажется, уже известная функция (Keccak как финалист NIST хэш-функции конкуренции) У меня есть несколько вопросов, связанных с этой темой:SHA-3 статус и PBKDF2-HMAC-SHA-3 тестовые векторы
- NIST site говорит что NIST закрыт из-за провала государственного финансирования. Есть ли шанс, что SHA-3 когда-нибудь будет окончательно принят?
- BouncyCastle библиотека имеет реализацию SHA-3, результаты которой являются такими же, как примеры, опубликованные в wikipedia article (я проверил это). Поскольку окончательный стандарт не одобрен, можно ли ему доверять? Википедия говорит, что это, вероятно, будет изменено, но как оно может измениться, поскольку окончательный алгоритм, похоже, не подлежит изменению (иначе это будет другой алгоритм).
- Here Кто-то отметил, что следует избегать использования PBKDF2 с SHA-3 для усиления ключа и хеширования паролей. Но я не понимаю, почему? (как это может дать злоумышленнику преимущество, если алгоритм не быстрый?)
- Я не мог найти тестовые векторы где-нибудь, чтобы проверить мою реализацию PBKDF2 -HMAC-SHA3 в scala на основе java api BouncyCastle. Я могу опубликовать свою тестовую спецификацию с некоторыми результатами. Но сначала кто-нибудь может опубликовать какие-либо тестовые векторы/spec?
Вот моя реализация в Скале:
package my.crypto
import org.bouncycastle.crypto.digests.SHA3Digest
import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator
import org.bouncycastle.crypto.PBEParametersGenerator
import org.bouncycastle.crypto.params.KeyParameter
object PBKDF2WithHmacSHA3 {
def apply(password: String, salt: Array[Byte], iterations: Int = 65536, keyLen: Int = 256): Array[Byte] = {
val generator = new PKCS5S2ParametersGenerator(new SHA3Digest(256))
generator.init(
PBEParametersGenerator.PKCS5PasswordToUTF8Bytes(password.toCharArray),
salt,
iterations
)
val key = generator.generateDerivedMacParameters(keyLen).asInstanceOf[KeyParameter]
key.getKey
}
}
Одна сомнительна вещь для меня new SHA3Digest(256)
, длина 256 бит в конструкторе, она должна быть такой же, как при условии длины ключа или некоторой фиксированной один, как я сделал? Я решил использовать фиксированную длину, потому что можно использовать только некоторые фиксированные значения, и пользователь API-объекта объекта может предоставить любое значение в качестве параметра длины ключа, но большинство необычных событий приведет к исключению, вызванному изнутри конструктора SHA3Digest
. Также значение по умолчанию составляет 288 (если не указана длина ключа), что выглядит странно.
Заранее благодарен!
U.S.закрытие правительства - временная ситуация. Окончательное решение чего-то вроде принятия нового алгоритма безопасного хэша не будет затронуто им. В худшем случае это может затянуться на неделю или две, если предположить, что это предназначено для принятия. –
(в качестве оповещения: кто-то был мной) – CodesInChaos
Если вы можете найти три (или более) библиотеки с реализациями Final Round Keccak и, возможно, поможете с кодированием интерфейса, если они находятся на языках, которые вы знаете, я был бы рад генерировать и публиковать тестовые векторы PBKDF2-HMAC-FinalRoundKeccak-xxx. Обычно тестовые векторы я использую, а некоторые библиотеки образцов находятся на [моем неоперившемся сайте github] (https://github.com/Anti-weakpasswords) - обратите внимание на разные лицензии, конечно. Я прошу трех, потому что, если все три согласны (и проходят векторы теста зависимостей, то есть известные выходы FRKeccak, я предполагаю, что это хорошо.) –