Рейтинг:0

Где спецификация для SHA1PRNG?

флаг in

Я искал алгоритм SHA1PRNG, который реализован в Java SecureRandom Class. Кто-нибудь знает, как именно работает этот алгоритм? Я не нашел источника, где подробно описан алгоритм.

Моя цель — использовать его в JavaScript, но я не нашел никакой реализации, поэтому мне приходится делать это самостоятельно (только в образовательных целях и без использования в производстве). Если кто-то уже реализовал его, было бы неплохо получить его в качестве эталонной реализации.

флаг us
Этот вопрос лучше подходит для форума SO по умолчанию. Когда дело доходит до этого - почему вы хотите использовать именно его? Вы можете найти [исходный код](https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java), но разных поставщиков JVM/JCE может иметь разную реализацию. В JS уже есть несколько библиотек, предоставляющих безопасное случайное число с использованием базовой системы.
Cryptomathician avatar
флаг in
@gusto2 спасибо за предоставление этого исходного кода. Я работаю над проектом для университета, где сервер использует этот класс с SHA1PRNG с определенным начальным числом для генерации определенной пары ключей (ECC, кривая secp256r1). Для работы с этим сервером мне нужна соответствующая реализация для JavaScript.
Cryptomathician avatar
флаг in
@gusto2 Gusto2 Кроме того, к моей проблеме я хочу знать, как именно работает этот PRNG, но я не нашел подходящего ресурса для этого алгоритма.
Cryptomathician avatar
флаг in
@gusto2 gusto2 Знаете ли вы, где я могу найти реализации JVM/JCE этих конкретных поставщиков? В данный момент я работаю над Linux и с обновлением 241 Oracle JDK 1.8.0.
флаг st
В JavaScript вы должны использовать `Crypto.getRandomValues()` https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues] вместо того, чтобы пытаться создать свой собственный CSRNG.
Cryptomathician avatar
флаг in
@rmalayter предназначен только для образовательных целей. Как вы можете узнать о таких вещах, если вам не разрешено попробовать это самостоятельно в лабораторной среде? Если все не заглянут в него, никто ничего об этом не узнает.Да, никогда не создавайте свою собственную криптосистему, но криптографы тоже должны с чего-то начинать и изучать подобные вещи.
флаг st
@Cryptomatician, извините, в вашем вопросе не было никаких указаний на то, что «это было в учебных целях».Есть много проблем с написанием CSRNG в среде JavaScript (браузера). Во-первых, безопасное получение случайной энтропии для заполнения, а затем также предотвращение того, чтобы сторонний сценарий или конечный пользователь «увидел» ваш исходный материал или фактические случайные числа, которые вы генерируете. Встроенная в браузер функция `Crypto.getRandomValues()` решает эти проблемы, используя CSRNG операционной системы напрямую через системный вызов.
Cryptomathician avatar
флаг in
@rmalayter спасибо за объяснение. Можно более общий вопрос. Возможно ли вообще написать CSPRNG на JavaScript (в браузере), чтобы можно было преодолеть упомянутые вами проблемы, не используя CSPRNG вне браузера?
флаг st
@Cryptomatician это зависит от потребностей безопасности приложения; если вас не волнует, что конечный пользователь увидит состояние или сможет изменить выходные данные, вы теоретически можете собирать энтропию из движений мыши пользователя и клавиатуры, используя криптографическую хеш-функцию для хеширования их в начальное число. Все это можно сделать в браузере, но конечный пользователь может легко увидеть или изменить любой из них, нажав F12 и открыв инструменты разработчика. Даже если вместо этого вы использовали `window.crypto.getRandomValues`, конечный пользователь может просто отказаться от использования этих значений и подставить свои собственные при выполнении запросов POST или API.
Рейтинг:2
флаг us

Моя цель - использовать его в JavaScript, но я не нашел никакой реализации

Вы можете найти исходный код, но у разных поставщиков JVM/JCE может быть разная реализация.

видеть: https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java

Кроме того, к моей проблеме я хочу знать, как именно работает этот PRNG

Об Оракуле документ сайт SHA1PRNG описывается как:

Имя алгоритма генерации псевдослучайных чисел (PRNG), предоставляемого поставщиком SUN. Этот алгоритм использует SHA-1 в качестве основы для PRNG. Он вычисляет хэш SHA-1 на основе истинно случайного начального значения, объединенного с 64-битным счетчиком, который увеличивается на 1 для каждой операции. Из 160-битного вывода SHA-1 используются только 64 бита.

Знаете ли вы, где я могу найти реализации этих конкретных поставщиков JVM/JCE?

SHA1PRNG, по-видимому, унаследован от самых ранних версий Java, поэтому он должен быть наиболее совместимым, который вы можете получить.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.