Здравствуйте, Xander Zerge, Вы писали:
XZ>Здравствуйте, Khimik, Вы писали:
K>>Сорри, пока не понял ничего. K>>Когда мне пишут — шифруют закрытым или открытым ключом? XZ>Шифруют открытым — только он опубликован же. Написать тебе может любой. А расшифровываешь только ты — закрытым, т.к. он есть только у тебя.
Ну так что такое вообще "закрытый ключ" в данном контексте? Если у отправителя этого закрытого ключа нет, как он может сгенировать что-то такое, что я расшифрую, а хакер не расшифрует?
K>>На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители? XZ>Перемножение — на этапе генерации пары ключей, разложение — при попытке подбора закрытого ключа по открытому.
Не понимаю пока.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
K>>>На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители? XZ>>Перемножение — на этапе генерации пары ключей, разложение — при попытке подбора закрытого ключа по открытому.
K>Не понимаю пока.
Ну можешь хотя бы почитать описание алгоритма RSA (как одного из наиболее простых), там это расписано
P>4 Позиция где он найден это будет шифрованым значением байта.
— в общем случае байт может быть вообще не найден
— позиция может не влезть в байт. а отбросить лишние биты нельзя, т.к. как потом расшифровывать? да и быстродействие страдает: сканировать неизвестно сколько байт на каждый шифруемый байт. вряд ли поедет велосипед с такими квадратными колесами.
гораздо проще проксорить младший байт псевдослучайного числа с найденным в файле и с шифруемым.
Здравствуйте, Khimik, Вы писали:
K>Ну так что такое вообще "закрытый ключ" в данном контексте? Если у отправителя этого закрытого ключа нет, как он может сгенировать что-то такое, что я расшифрую, а хакер не расшифрует?
В гугле полно ссылок по асимметричному шифрованию, по которым на пальцах объясняются принципы работы.
Схема передачи данных между двумя субъектами (А и Б) с использованием открытого ключа выглядит следующим образом:
Субъект А генерирует пару ключей, открытый и закрытый (публичный и приватный).
Субъект А передает открытый ключ субъекту Б. Передача может осуществляться по незащищенным каналам.
Субъект Б шифрует пакет данных при помощи полученного открытого ключа и передает его А. Передача может осуществляться по незащищенным каналам.
Субъект А расшифровывает полученную от Б информацию при помощи секретного, закрытого ключа.
В такой схеме перехват любых данных, передаваемых по незащищенным каналам, не имеет смысла, поскольку восстановить исходную информацию возможно только при помощи закрытого ключа, известного лишь получателю и не требующего передачи.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, L_G, Вы писали:
P>>4 Позиция где он найден это будет шифрованым значением байта.
L_G>- в общем случае байт может быть вообще не найден L_G>- позиция может не влезть в байт. а отбросить лишние биты нельзя, т.к. как потом расшифровывать? да и быстродействие страдает: сканировать неизвестно сколько байт на каждый шифруемый байт. вряд ли поедет велосипед с такими квадратными колесами. L_G>гораздо проще проксорить младший байт псевдослучайного числа с найденным в файле и с шифруемым.
Допустим позиция число 4 байта, позволяет использовать ключевой файл размером в 4 гб. Ну превратился один байт исходный в 4 зашифрованых, это непринципиально для того объема, что человек вручную написать может.
У байтов только 256 возможных значений, чутьё подсказывает что в 4-ех гигабайтном файле двоичного формата встречаются все из них по многу раз, и уходить от начальной позиции не прийдётся далеко.
И кстати файл даже передавать не надо, только условиться и скачать одинаковый ISO дистрибутив линукса например.
Забыл сказать: единственный критерий "плохости" псевдослучайной последовательности по сравнению с истинно случайной — её зацикленность. Готовую последовательность можно просто проверить на зацикленность — начиная с конца, т.к. первые байты в общем случае могут не входить в кольцо, а последние не могут. Если цикла нет — последовательность можно считать истинно случайной (если строго — нужно проверять зацикленность последовательности битов, а не байтов...)
Здравствуйте, Khimik, Вы писали:
K>Ну так что такое вообще "закрытый ключ" в данном контексте? Если у отправителя этого закрытого ключа нет, как он может сгенировать что-то такое, что я расшифрую, а хакер не расшифрует?
Вот такая прелесть ассиметричного алгоритма. Перемножить два числа — легко. Понять, какие два числа были перемножены — трудно.
K>>>На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители? XZ>>Перемножение — на этапе генерации пары ключей, разложение — при попытке подбора закрытого ключа по открытому.
K>Не понимаю пока.
Почитай уже про RSA, это давно расписано разжёвано. Даже Алиса знает:
Давайте разберем математику RSA пошагово:
Генерация ключей:
Выбираются два больших простых числа p и q (например, по 150 цифр каждое)
Вычисляется их произведение n = p × q
Вычисляется функция Эйлера φ(n) = (p-1)(q-1)
Выбирается случайное число e (открытый экспонент), взаимно простое с φ(n)
Вычисляется d (закрытый экспонент) как обратное к e по модулю φ(n):
d × e ≡ 1 (mod φ(n))
Открытый ключ: (e, n)
Закрытый ключ: (d, n)
Шифрование сообщения M:
Сообщение представляется как число m < n
Шифрование: c = m^e mod n
Расшифровка шифра c:
m = c^d mod n
Почему это работает:
Благодаря свойствам модульной арифметики и теореме Эйлера
m^(e×d) ≡ m (mod n), если e и d подобраны правильно
Пример (для понимания принципа, не для реальной защиты):
p = 3, q = 11
n = 33
φ(n) = 20
e = 7 (взаимно просто с 20)
d = 3 (7×3 = 21 ≡ 1 mod 20)
Шифруем m = 5:
c = 5^7 mod 33 = 78125 mod 33 = 26
Расшифровываем c = 26:
m = 26^3 mod 33 = 17576 mod 33 = 5
Безопасность основана на том, что:
Умножить два простых числа легко
Разложить большое число на множители сложно
Найти d без знания p и q невозможно
Для реальных систем используются числа порядка 300-400 цифр, что делает взлом методом перебора практически невозможным даже с использованием современных суперкомпьютеров.
Важно: RSA обычно используется для шифрования небольших блоков данных (например, ключей симметричного шифрования) из-за относительно низкой скорости работы по сравнению с симметричными алгоритмами.
Здравствуйте, Khimik, Вы писали:
K>CryptGenRandom или RtlGenRandom
По некоторым сведениям, криптофункции Windows являются специально ослабленными, и в них есть закладки.
Серьёзные пацаны не пользуются ими, а либо используют проверенные реализации криптографии, либо пишут свою криптографию и никому не верят.
Здравствуйте, Khimik, Вы писали:
K>Я написал на Delphi программу для такого шифрования текстов и файлов: мой файл закрытого ключа имеет размер 4 гб, и при шифровании программа выбирает в нём случайное место и добавляет байты оттуда.
А расшифратор ты когда писать будешь ? Или там надо жать кнопку "расширофать" с выбором случайного места на стороне приема пока внятный текст не получится ?
Здравствуйте, jamesq, Вы писали:
Pzz>>генерируют псевдослучайный ключ для симметричного шифрования
J>Я знаю, что бывают засады с заведомо слабыми ключами для некоторых алгоритмов. Так что псевдослучайно генерировать может быть опасно.
Ну если на 2^128 приходится с десяток слабых ключей, шанс на них нарваться примерно такой же, как шанс расщифровать текст, не зная ключа, с 10 случайных попыток.
K>>CryptGenRandom или RtlGenRandom
J>По некоторым сведениям, криптофункции Windows являются специально ослабленными, и в них есть закладки. J>Серьёзные пацаны не пользуются ими, а либо используют проверенные реализации криптографии, либо пишут свою криптографию и никому не верят.
Ок, вот и я напишу свой ГСЧ: сделаю zip файл очень большого размера, и буду с ним колдовать.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Здравствуйте, Khimik, Вы писали:
K>Ок, вот и я напишу свой ГСЧ: сделаю zip файл очень большого размера, и буду с ним колдовать.
Только другим свои поделия не впаривай. Чтобы страдал от своей криворукости только ты.
Поразительно вообще, что нашёлся программист, не слышавший об ассиметричной криптографии.
Ладно бы школьник...
Здравствуйте, Pzz, Вы писали:
Pzz>Ну если на 2^128 приходится с десяток слабых ключей, шанс на них нарваться примерно такой же, как шанс расщифровать текст, не зная ключа, с 10 случайных попыток.
А если их не десяток, а гораздо больше? В криптографии нельзя полагаться на авось.
Здравствуйте, jamesq, Вы писали:
Pzz>>Ну если на 2^128 приходится с десяток слабых ключей, шанс на них нарваться примерно такой же, как шанс расщифровать текст, не зная ключа, с 10 случайных попыток.
J>А если их не десяток, а гораздо больше?
Ну так про изученные алгоритмы известно, сколько их.
J>В криптографии нельзя полагаться на авось.
А по-моему, криптография только и делает, что полагается на авось. Просто авось там хорошо изученный, надежный, с известными и предсказуемыми свойствами.
Здравствуйте, Pzz, Вы писали:
Pzz>Ну так про изученные алгоритмы известно, сколько их.
Помню, когда в начале нулевых пробовал запрограммировать наш стандарт ГОСТ 28147, и читал доки на эту тему, там выяснилось что стандарт не полон, и не освещает вопросы генерации ключей.
Что как раз там есть слабые ключи, но сколько и каких — неизвестно.