Программа для шифрования с закрытым ключом
От: Khimik  
Дата: 05.03.25 16:20
Оценка: -1 :))) :))) :))) :))
Часто слышал страшилки, что общаться в телеграме небезопасно: в команде тг есть кроты, которые за деньги сливают кому попало базы данных с переписками и данными пользователей тг. Возникает потребность озаботиться темой шифрования.
В интернете обычно используется шифрование с открытым ключом. Для меня это довольно загадочная тема, может кто-нибудь расскажет как это работает. Типа, хакер может полностью перехватить ваши переписки, но расшифровать их сможет только с квантовым компьютером?
Более понятная вещь — шифрование с закрытым ключом. Наверно тут все это понимают, но на всякий случай расскажу. Предположим, у вас есть текстовой файл размером 1 КБ. Вы берёте файл размером 1 КБ с полностью случайным набором байт (закрытый ключ), побайтово складываете эти два файла; получается внешне полностью случайный файл, вы его передаете через интернет, и потом из этого файла надо побайтово вычесть файл закрытого ключа. Главное — передавать другим людям файл закрытого ключа не через интернет, а флешками.
Я написал на Delphi программу для такого шифрования текстов и файлов: мой файл закрытого ключа имеет размер 4 гб, и при шифровании программа выбирает в нём случайное место и добавляет байты оттуда.
Если кому-то моя программа интересна, можете написать на nickolay5544[одомашненный волк]gmail.com чтобы я вам её прислал. А у меня вопрос, насколько сложно на Delphi XE портировать программу под андроид (сделать .apk файл). Может меня проконсультируют как это сделать? Ещё я не помню — на Delphi XE можно скомпилировать программу под Mac? Если да, я наверно не буду портировать её на Lazarus, по крайней мере пока. Мне будет достаточно портировать программу под Mac и Android через fmx.

  Скрытый текст
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re: Программа для шифрования с закрытым ключом
От: rg45 СССР  
Дата: 05.03.25 16:47
Оценка: +2
Здравствуйте, Khimik, Вы писали:

K>Более понятная вещь — шифрование с закрытым ключом. Наверно тут все это понимают, но на всякий случай расскажу. Предположим, у вас есть текстовой файл размером 1 КБ. Вы берёте файл размером 1 КБ с полностью случайным набором байт (закрытый ключ), побайтово складываете эти два файла; получается внешне полностью случайный файл, вы его передаете через интернет, и потом из этого файла надо побайтово вычесть файл закрытого ключа.


Нифига ты не фишку не рубишь. При асимметричном шифровании закрытый ключ используется для ДЕшифрования, а также для наложения ЭЦП. Для шифрования и проверки ЭЦП достаточно открытого ключа.
--
Справедливость выше закона. А человечность выше справедливости.
Re: Программа для шифрования с закрытым ключом
От: Osaka  
Дата: 05.03.25 16:49
Оценка:
>получается внешне полностью случайный файл, вы его передаете через интернет
Долго ли укркомнадзор станет терпеть "полностью случайные файлы", если это станет сколько-нибудь массовым явлением?
Нужно генерить стеганографический файл, внешне похожий на обычный форумный бред.
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Re: Программа для шифрования с закрытым ключом
От: Xander Zerge Россия www.zerge.com
Дата: 05.03.25 16:52
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>Более понятная вещь — шифрование с закрытым ключом. Наверно тут все это понимают, но на всякий случай расскажу. Предположим, у вас есть текстовой файл размером 1 КБ. Вы берёте файл размером 1 КБ с полностью случайным набором байт (закрытый ключ), побайтово складываете эти два файла; получается внешне полностью случайный файл, вы его передаете через интернет, и потом из этого файла надо побайтово вычесть файл закрытого ключа. Главное — передавать другим людям файл закрытого ключа не через интернет, а флешками.


Так вот алгоритмы с открытым ключом и придуманы, чтобы флешками не передавать ничего.

Ты выпускаешь пару ключей — закрытый+открытый. Закрытый держишь у себя. Открытый раздаёшь всем, кто желает тебе что-то секретное написать.
Дальше, тебе пишут, и шифруют твоим ключом. Расшифровать это, имея открытый ключ — практически невозможно. Получить из открытого закрытый ключ — практически невозможно.
Для расшифровки потребуется закрытый ключ, который есть только у тебя, и он никуда ни разу не передавался.
Ну и для ответа, тебе также надо знать открытый ключ того, кому ты отвечаешь.

Ну и техническая деталь. Ассиметричные алгоритмы — медленные, по сравнению с симметричными. Поэтому ассиметричным алгоритмом шифруется обычно только разовый симметричный ключ, которым зашифровано уже само сообщение.
Серёжа Новиков,
программист
Re: Программа для шифрования с закрытым ключом
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.03.25 16:56
Оценка: +5
Здравствуйте, Khimik, Вы писали:

K>Часто слышал страшилки, что общаться в телеграме небезопасно: в команде тг есть кроты, которые за деньги сливают кому попало базы данных с переписками и данными пользователей тг. Возникает потребность озаботиться темой шифрования.


Открой для себя PGP.

K>В интернете обычно используется шифрование с открытым ключом. Для меня это довольно загадочная тема, может кто-нибудь расскажет как это работает. Типа, хакер может полностью перехватить ваши переписки, но расшифровать их сможет только с квантовым компьютером?


K>Более понятная вещь — шифрование с закрытым ключом. Наверно тут все это понимают, но на всякий случай расскажу. Предположим, у вас есть текстовой файл размером 1 КБ. Вы берёте файл размером 1 КБ с полностью случайным набором байт (закрытый ключ), побайтово складываете эти два файла; получается внешне полностью случайный файл, вы его передаете через интернет, и потом из этого файла надо побайтово вычесть файл закрытого ключа. Главное — передавать другим людям файл закрытого ключа не через интернет, а флешками.


Твой алкогоритм плох тем, что зная открытый и зашифрованный текст, можно восстановить ключ. Например, если большинство твоих писем начинается со слова "Привет", первые 6 (вернее 12, это же utf-8) байтов ключа ты уже раскрыл. Ну а дальше так, потихонечку, можно всё раскрыть.

Поэтому в настоящем шифровании одна и та же псевдослучайная последовательность никогда не используется для наложения на открытый текст дважды (сам по себе процесс такого наложения называется "гаммирование").

В криптографию надо уметь, чтобы не насвистеть. Я, например, не возьмусь делать шифрование для ответственных применений.
Re[2]: Программа для шифрования с закрытым ключом
От: Khimik  
Дата: 05.03.25 17:09
Оценка:
Здравствуйте, Pzz, Вы писали:

K>>Более понятная вещь — шифрование с закрытым ключом. Наверно тут все это понимают, но на всякий случай расскажу. Предположим, у вас есть текстовой файл размером 1 КБ. Вы берёте файл размером 1 КБ с полностью случайным набором байт (закрытый ключ), побайтово складываете эти два файла; получается внешне полностью случайный файл, вы его передаете через интернет, и потом из этого файла надо побайтово вычесть файл закрытого ключа. Главное — передавать другим людям файл закрытого ключа не через интернет, а флешками.


Pzz>Твой алкогоритм плох тем, что зная открытый и зашифрованный текст, можно восстановить ключ. Например, если большинство твоих писем начинается со слова "Привет", первые 6 (вернее 12, это же utf-8) байтов ключа ты уже раскрыл. Ну а дальше так, потихонечку, можно всё раскрыть.


Pzz>Поэтому в настоящем шифровании одна и та же псевдослучайная последовательность никогда не используется для наложения на открытый текст дважды (сам по себе процесс такого наложения называется "гаммирование").


Да, я это понимаю, но у меня же именно поэтому закрытый ключ размером 4 гигабайта. Если шифровать только текст, практически каждый раз будет выбираться новое случайное место в этом файле.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re[2]: Программа для шифрования с закрытым ключом
От: Khimik  
Дата: 05.03.25 17:12
Оценка:
Здравствуйте, Xander Zerge, Вы писали:

XZ>Так вот алгоритмы с открытым ключом и придуманы, чтобы флешками не передавать ничего.


XZ>Ты выпускаешь пару ключей — закрытый+открытый. Закрытый держишь у себя. Открытый раздаёшь всем, кто желает тебе что-то секретное написать.

XZ>Дальше, тебе пишут, и шифруют твоим ключом. Расшифровать это, имея открытый ключ — практически невозможно. Получить из открытого закрытый ключ — практически невозможно.
XZ>Для расшифровки потребуется закрытый ключ, который есть только у тебя, и он никуда ни разу не передавался.
XZ>Ну и для ответа, тебе также надо знать открытый ключ того, кому ты отвечаешь.

XZ>Ну и техническая деталь. Ассиметричные алгоритмы — медленные, по сравнению с симметричными. Поэтому ассиметричным алгоритмом шифруется обычно только разовый симметричный ключ, которым зашифровано уже само сообщение.


Сорри, пока не понял ничего.
Когда мне пишут — шифруют закрытым или открытым ключом?
На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re[3]: Программа для шифрования с закрытым ключом
От: CRT  
Дата: 05.03.25 17:51
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Когда мне пишут — шифруют закрытым или открытым ключом?


Твой закрытый ключ — это тот который знаешь только ты. Твой открытый ключ — тот который знают другие/другой.

Когда другой человек тебе пишет он шифрует сообщение твоим открытым ключом. А ты потом у себя его сообщение расшифровываешь своим закрытым.

Соответственно, когда ты пишешь другому человеку, ты шифруешь сообщение его открытым ключом, а он расшифровывает твое сообщением своим закрытым ключом.
Re[4]: Программа для шифрования с закрытым ключом
От: Khimik  
Дата: 05.03.25 17:53
Оценка:
Здравствуйте, CRT, Вы писали:

K>>Когда мне пишут — шифруют закрытым или открытым ключом?


CRT>Твой закрытый ключ — это тот который знаешь только ты. Твой открытый ключ — тот который знают другие/другой.


CRT>Когда другой человек тебе пишет он шифрует сообщение твоим открытым ключом. А ты потом у себя его сообщение расшифровываешь своим закрытым.


Тогда я не понимаю, что такое закрытый ключ. Это может не ключ а какой-то математический алгоритм что ли?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re: Программа для шифрования с закрытым ключом
От: pva  
Дата: 05.03.25 19:46
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>В интернете обычно используется шифрование с открытым ключом. Для меня это довольно загадочная тема, может кто-нибудь расскажет как это работает. Типа, хакер может полностью перехватить ваши переписки, но расшифровать их сможет только с квантовым компьютером?

Ты бы глянул хоть википедию, что ли? Там же даже примеры есть как это работает.

K>Я написал на Delphi программу для такого шифрования текстов и файлов: мой файл закрытого ключа имеет размер 4 гб, и при шифровании программа выбирает в нём случайное место и добавляет байты оттуда.

Это называется "одноразовый блокнот". С тем же успехом вместо 4гб файла можно использовать 16 байт для AES ключа, который в свою очередь использовать в качестве PRNG.

А ключ передавать хоть тем самым RSA, но лучше уж ECDH. Сообщение у тебя будет "соль" + крипта. Соответственно, сидом для инициализации генератора будет "соль", а дальше просто гаммирование. Ну и base64 не забудь, куда ж без него.
newbie
Re[2]: Программа для шифрования с закрытым ключом
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.03.25 20:11
Оценка:
Здравствуйте, Osaka, Вы писали:

>>получается внешне полностью случайный файл, вы его передаете через интернет

O>Долго ли укркомнадзор станет терпеть "полностью случайные файлы", если это станет сколько-нибудь массовым явлением?
O>Нужно генерить стеганографический файл, внешне похожий на обычный форумный бред.

Хороший архиватор тоже выдаёт файл, напоминающий случайный.
Re[3]: Программа для шифрования с закрытым ключом
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.03.25 20:18
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Сорри, пока не понял ничего.

K>Когда мне пишут — шифруют закрытым или открытым ключом?
K>На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители?

Ну, если делать очень наивно, генерируют псевдослучайный ключ для симметричного шифрования (очень короткий, 16-32 байта) и передают его тебе, зашифровав твоим открытим ключом — чтобы ты своим закрытым ключом мог расшифровать.

Сам по себе этот псевдослучайный ключ, используют с каким-нибудь алгоритмом шифрования (ну, например, AES), но используют его не в лоб, а в каком-нибудь режиме (https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC_%D1%88%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F). Один из простейших режимов — можно шифровать AES-ом последовательный счетчик (0, 1, 2, ...), а получившуюся псевдослучайную последовательность накладывать уже на открытый текст, получая зашифрованный текст.

Всё это сложнее, чем ты думаешь, и очень легко насвистеть. Ошибки-то не слишком заметны. Вроде всё зашифровывается и расшифровывается, и на вид выглядит надёжно. А на практике, содержит какую-нибудь уязвимость. Даже профессиональные криптографы иногда допускают ошибки, и иногда достаточно хитрые, так что их только через несколько лет обнаруживают, при том, что все эти годы алгоритм и использовался активно и другие профессионалы на него смотрели.
Re[2]: Программа для шифрования с закрытым ключом
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.03.25 20:21
Оценка: +2
Здравствуйте, pva, Вы писали:

pva>А ключ передавать хоть тем самым RSA, но лучше уж ECDH. Сообщение у тебя будет "соль" + крипта. Соответственно, сидом для инициализации генератора будет "соль", а дальше просто гаммирование. Ну и base64 не забудь, куда ж без него.


Ты сейчас пытаешься ребенку, который с трудом складывает на палочках числа в пределах первого десятка, на пальцах объяснить, как решаются системы дифференциальных уравнений.
Re[3]: Программа для шифрования с закрытым ключом
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 05.03.25 21:57
Оценка: -1 :)
Про необходимость использования постквантовой криптографии ещё никто не вспоминал?
Re[4]: Программа для шифрования с закрытым ключом
От: Khimik  
Дата: 06.03.25 03:11
Оценка: -1
Здравствуйте, Pzz, Вы писали:

Pzz>Всё это сложнее, чем ты думаешь, и очень легко насвистеть. Ошибки-то не слишком заметны. Вроде всё зашифровывается и расшифровывается, и на вид выглядит надёжно. А на практике, содержит какую-нибудь уязвимость. Даже профессиональные криптографы иногда допускают ошибки, и иногда достаточно хитрые, так что их только через несколько лет обнаруживают, при том, что все эти годы алгоритм и использовался активно и другие профессионалы на него смотрели.


Мне тут сказали, что и в моём варианте есть уязвимость: закрытый ключ у меня генерируется через random в Delphi, и зная это, можно его распознать. Прошу подсказать, как сгенерировать действительно более-менее случайное число (криптостойкий генератор случайных чисел). Можно как голую теорию, так и готовую функцию в Delphi. Мне сказали что нужен CryptGenRandom или RtlGenRandom, просьба подсказать — это есть в Delphi? Если да, какой модуль?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
Re: Программа для шифрования с закрытым ключом
От: system.console  
Дата: 06.03.25 03:34
Оценка:
ну вот видите — оказывается кто-то еще пишет на Delphi !
А вы смеялись ...
Re[4]: Программа для шифрования с закрытым ключом
От: Pzz Россия https://github.com/alexpevzner
Дата: 06.03.25 04:41
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Про необходимость использования постквантовой криптографии ещё никто не вспоминал?


Да нет, нам бы до пяти считать научиться...
Re[3]: Программа для шифрования с закрытым ключом
От: Xander Zerge Россия www.zerge.com
Дата: 06.03.25 10:54
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Сорри, пока не понял ничего.

K>Когда мне пишут — шифруют закрытым или открытым ключом?
Шифруют открытым — только он опубликован же. Написать тебе может любой. А расшифровываешь только ты — закрытым, т.к. он есть только у тебя.
K>На каком этапе здесь математические операции — перемножение чисел и разложение чисел на простые множители?
Перемножение — на этапе генерации пары ключей, разложение — при попытке подбора закрытого ключа по открытому.
Серёжа Новиков,
программист
Re[5]: Программа для шифрования с закрытым ключом
От: L_G Россия  
Дата: 06.03.25 11:26
Оценка:
K>Прошу подсказать, как сгенерировать действительно более-менее случайное число (криптостойкий генератор случайных чисел).

Тебе вроде нужно не число, а последовательность длиной в 4 Гб!

Какой бы программная функция не была, всё, что она сможет выдать без источника реальной случайности — это только псевдослучайные последовательности.
Источники реальной случайности — это АЦП, в том числе видеокамера и аудиокарта (без разницы, что поступает на их аналоговые входы).
(На худой конец — датчики температуры проца/материнки, но поток данных слишком медленный. Не говоря уж о мыши и клавиатуре, хаотически мучиемых пользователем — но для получения одного истинно случайного числа и они годились.)
Т.к. АЦП всегда шумят, самым случайным будет младший бит каждого субпикселя/сэмпла. Но надежнее в цикле брать куски сырых данных в несколько Кбайт и хэшировать их в 32-64 бита — этим вся случайность с этих килобайт будет как бы собрана и упакована в эти биты.

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

Еще на практике достаточно взять несколько разных псевдослучайных генераторов и проксорить между собой их результаты. (Во избежание — потом стереть эту прогу и исходники.)
Еще лучше даже плохую псевдослучайную последовательность как следует случайно перетасовать (для этого есть свои алгоритмы).
Каша в голове — пища для ума (с)
Отредактировано 06.03.2025 15:52 L_G . Предыдущая версия . Еще …
Отредактировано 06.03.2025 15:51 L_G . Предыдущая версия .
Отредактировано 06.03.2025 15:17 L_G . Предыдущая версия .
Отредактировано 06.03.2025 11:58 L_G . Предыдущая версия .
Re[6]: Программа для шифрования с закрытым ключом
От: Pyromancer  
Дата: 06.03.25 12:11
Оценка:
Здравствуйте, L_G, Вы писали:

K>>Прошу подсказать, как сгенерировать действительно более-менее случайное число (криптостойкий генератор случайных чисел).


L_G>Какой бы программная функция не была, всё, что она сможет выдать без источника реальной случайности — это только псевдослучайные последовательности.


Используем классику жанра — книжный шифр с поправкой на мощность современных компутеров и настоящая случайность не особо нужна.

1 Берем большой архив, или там фильм в UHD.
2 Генерируем псевдослучайное число от 0 до длины файла в байтах
3 Ищем байт равный кодируемому начиная с этой позиции в большом файле
4 Позиция где он найден это будет шифрованым значением байта.
5 Повторяем с шага 2 для каждого байта в шифруемом файле

Даже зная методику шифрования без правильного файла не вскрыть, а оригинальная уязвимость книжного шифра к частотному анализу перекрыта.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.