Генерация одинаковых «случайных чисел» с начальным числом python на двух разных компьютерах - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь сгенерировать тот же список случайных последовательностей, используя функцию «genKeys». Используя то же начальное число, я получу тот же список, но только на моем ноутбуке.

Запустив этот код на моем Raspberry Pi, я получу совершенно другой список.

Я предполагаю, что ГСЧ другой.

Есть ли способ «объединить» генерируемые числа или реализовать алгоритм, который будет генерировать одинаковые числа?

def genKeys(number, seed, length):

    rng = random.Random(seed)
    seq = "abcdefghijklmopqrstuvxyzABCDEFGHIJKLMOPQRSTUVWXYZ1234567890 +-.,!%/?<>^_[]#$"
    key = open("key.txt", "w")

    for i in range(0, number):
        gen = ""
        n = 0

        while n < length:
            charGen = rng.choice(seq)
            gen += charGen
            n = n + 1

        key.write("%s\n" % (gen))

    key.close()

Справочная информация: эти ключи будут использоваться как одно- Время-Используйте ключи для шифрования сообщений.

1 Ответ

1 голос
/ 07 января 2020

Для целей генерации ключей шифрования Python random.Random не является подходящим выбором; его основной алгоритм, Mersenne Twister, не является генератором случайных чисел cryptographi c.

Вместо этого существуют так называемые функции вывода ключей (KDF, также называемые солеными хэшами), которые принимают как семя, так и соль генерировать ключ шифрования. Соль необходима для того, чтобы смягчить атаки перед вычислением. И если начальное число относительно легко угадать (например, начальное число представляет собой пароль), некоторые KDF намеренно тратят заметное время и / или память для вычисления атак на словарь.

Если ваша цель - отправлять сообщения безопасно между двумя компьютерами (например, между Raspberry Pi и P C), вам трудно помочь вам дальше, так как правильное решение зависит от ваших потребностей. Например, существуют установленные протоколы для установки безопасного канала между двумя компьютерами, включая TLS, J-PAKE и другие. Алгоритмы одноразовых паролей включают одноразовые пароли на основе ha sh (HOTP), одноразовые пароли на основе времени (TOTP) и другие. Протоколы безопасности, в частности, далеко не просты в реализации, и к ним лучше всего обращаться в Python через выделенный пакет Python.

...