#криптография
Допустим я хочу зашифровать число 100. Выбираю случайное большое число (наш ключ), допустим 10^27+126737912 и умножаю на 100. Передаю другому человеку, и он этим же ключом расшифровываем сообщение (делит результат и прошлого шага на ключ). Насколько безопасно использовать такой метод шифрования, если ключ передаётся не по интернету, а лично, допустим на бумажке? :) P.S Я думаю нереально, т.к если я умножу 10 на 15 (150) и передам другому человеку по открытому каналу, хакер никак не сможет восстановить 10 из 150 без ключа.
Ответы
Ответ 1
Вот простой пример Функция на python, шифрующая несколько сообщений def encrypt(data, key): return [key * x for x in data] Функция расшифровывающая сообщения def decrypt(data, key): return [x // key for x in data] С помощью нее зашифруем несколько чисел: key = 977240797922194023705 print('key ', key) plain = [7, 18, 113] print('plain ', plain) encrypted = encrypt(plain, key) print('encrypted', encrypted) decrypted = decrypt(encrypted, key) print('decrypted', decrypted) Вывод key 977240797922194023705 plain [7, 18, 113] encrypted [6840685585455358165935, 17590334362599492426690, 110428210165207924678665] decrypted [7, 18, 113] А вот функция, с помощью которой хоть и неоднозначно, но с каждым новым сообщением все более точно можно получить ключ import functools import math def hackkey(data): return functools.reduce(math.gcd, data) hackedkey = hackkey(encrypted) print('hacked ', hackedkey) print(hackedkey == key) Вывод hacked 977240797922194023705 TrueОтвет 2
Нет, небезопасен. Даже для передачи 1 числа это опасно. Для числа в примере мы имеем всего Поэтому останется всего порядка сотни вариантов а что мы собственно передавали. Если мы передадим ещё одно число, например 9, то у нас останется всего 16 вариантов ключа. Такая защита не имеет смысла. В общем советую почитать что-то о ассиметричном шифровании, например RSA.
Комментариев нет:
Отправить комментарий