Рейтинг:3

Могу ли я рассматривать хэши SHA-256 как 64 броска игральных костей с числами от 1 до 16?

флаг in

Насколько я понимаю, SHA-256 довольно случайный или достаточно "случайный".

Я предположил, что это будет означать, что каждый персонаж будет вести себя как бросок костей от 1 до 16.

С этим предположением я ожидаю, что вы можете смоделировать вероятность повторения символов как $16^х$. Итак, цепочка из $\texttt{FFF}$ или же $\texttt{333}$ будет шанс 1 на $16^3 (4096)$ и цепочка из $\texttt{FFFF}$ шанс 1 на $16^4 (65536)$.

Но при создании большого количества хэшей (со случайными UUID в качестве начального числа), чтобы подтвердить мое предположение, числа не складываются. Например, в наборе из 100 000 хэшей у меня уже есть более 1 000 цепочек из 4 и более символов (в то время как я ожидал от 1 до 2 цепочек).

Итак, здесь я пытаюсь понять, почему мое предположение было неверным в первую очередь.

Я принципиально неправильно понял случайность хэшей SHA-256 или это что-то еще?

kelalaka avatar
флаг in
Неясный вопрос, поскольку ваш эксперимент не ясен. См. мой [эксперимент SHA-1 с ведущими нулями] (https://crypto.stackexchange.com/a/83227/18298). Как у вас есть цепочка 1K? Обратите внимание, что мы моделируем SHA-256 как псевдослучайную функцию, о которой мы не знаем, что это не так.
kelalaka avatar
флаг in
В вашей модели отсутствует момент, когда в 64-шестнадцатеричном выводе SHA-256 вам нужно найти вероятность последовательности из 4 символов в любом месте. Вы не можете реально смоделировать каждый выходной гекс как один рулон, поскольку они не независимы от ввода...
флаг in
@kelalaka спасибо за вклад!
Рейтинг:4
флаг my

Итак, цепочка из $\texttt{FFF}$ или же $\texttt{333}$ будет шанс 1 на $16^3 (4096)$

На самом деле, вероятность трех повторных покусываний (будь то $\texttt{FFF}$ или же $\texttt{333}$ или же $\texttt{000}$) будет 1 в $16^2 (256)$ - это происходит потому, что есть $16^3$ равновероятные значения этих 3 кусочков, и 16 из этих шаблонов являются повторами, поэтому вероятность повторения равна ${16\более 16^3} = {1\более 16^2}$. Если вы укажете, что они должны быть $\texttt{FFF}$ (и другие $\texttt{333}$ не будет считаться), тогда вы получите $16^3$; однако это не то, что вы делаете.

Например, в наборе из 100 тыс. хэшей у меня уже есть более 1 тыс. цепочек из 4 и более символов.

Это примерно так - в 100 000 хэшей есть примерно 6 000 000 мест, где может произойти строка из 4 повторяющихся кусочков; в любом месте есть вероятность $16^{-3} = {1 \более 4096}$ быть повторением - упрощенное вычисление дает около 1400 ожидаемых строк повторов.

Я говорю «упрощенный», потому что это прямолинейное вычисление игнорирует перекрывающиеся строки — например, за серию будет считаться строка из 5 повторяющихся кусочков, а не 2 серии из 4. Кроме того, вероятности, связанные с перекрывающимися строками, не являются независимыми. Хотя эти эффекты несколько уменьшают ожидаемую общую сумму, я считаю, что упрощенные вычисления достаточно хороши для приблизительной оценки.

флаг in
Большое спасибо! Указав на ошибку в моем предположении, я смог понять, в чем проблема, и с помощью этого видео https://www.youtube.com/watch?v=O4Qnsubo2tg я смог понять, как я должен настроить свою функцию.
флаг in
tbh, я все еще немного сбит с толку тем, почему шанс 1/4096 не означает, что в среднем 100k/4096 результатов, потому что это будет ~ 24.
knaccc avatar
флаг es
@braunbaer Поскольку в шестнадцатеричной строке из 64 символов существует 61 возможная позиция, в которой может быть последовательность из 4 шестнадцатеричных строк. Для каждой из этих позиций вероятность того, что первый символ будет таким же, как следующие три символа, составляет (1/16) ^ 3 = (1/4096). Следовательно, последовательности с четырьмя повторяющимися шестнадцатеричными символами на хеш будут (1/4096 * 61) = 0,01489257812. На 100 000 хэшей это 0,01489257812 * 100 000 = 1489.
флаг in
@knaccc да! это имеет большой смысл. Итак, чтобы было ясно, если бы мы работали с шестнадцатеричной строкой из 4 символов, у нас был бы «простой» шанс 1/4096, поскольку существует только одна возможная позиция для последовательности 4-шестнадцатеричной строки или (1/4096 * 1) быть ясным
knaccc avatar
флаг es
@braunbaer да, точно. Вероятность того, что все шестнадцатеричные символы будут одинаковыми, составляет 1/4096, что является еще одним способом сказать, что 2-й, 3-й и 4-й символы такие же, как и первый.
Maarten Bodewes avatar
флаг in
Этот Q / A сделал HNQ, поэтому я отредактировал вопрос, чтобы он был репрезентативным, что означает, конечно, также обновление ответа - надеюсь, вы не возражаете.

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

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