LINUX.ORG.RU

Вопрос про криптуху и AES / RSA.

 


1

2

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

Вопрос об аутентификации Алисы и «мире электронных подписей». Алиса хочет прислать Бобу токен (строку), по которому Боб может сказать, что строка сформирована именно Алисой.

Алиса формирует строку вида:

<HASH>-<TIME>-HELLOWORLD-<RAND-128>

где

<HASH> - хеш всей строки, за исключением самого ; предполагается, что алгоритм хеширования достаточно упорот и надёжен в меру важности этого спецзадания - какой-то распространённый SHA256, например или же самодельный с известным (или неизвестным) риском.

<TIME> - текущее время, нужное тут низачем, кроме как влиять на значение и внести немного рандома, ну и отчасти показать свои часы.

HELLOWORLD - заведомо известная всем строка.

<RAND-128> - рандомные 128 бит с потолка (одна задача - влиять на значение хеша).

Алиса шифрует эту строку каким-то симметричным алгоритмом, типа AES, используя Ключ К. Ключ К - сгенерированные ранее и сохранённые рандомные 512 байт.

Тот же ключ есть у Боба. И больше ни у кого.

Алиса передаёт зашифрованную строку Бобу. Боб расшифровывает её ключом К, вычисляет хеш от строки (кроме поля ) и сверяет вычисленный хеш с полем . А так же удостоверяется, что после лежит строка , ну и у строки какой-то известный размер. Ну, например, что не слишком в прошлом. Если все проверки - true, тогда Боб делает вывод, что строка пришла от Алисы, а не кого-то другого.

Вопросы:

  1. считается ли такой способ ответа на вопрос «Алиса ли прислала строку» мало-мальски вменяемым? В чём уязвимости?
  2. Достаточно ли будет выкинуть , а передавать просто <RAND-128>-HELLOWORLD и проверять только наличие HELLOWORLD в строке на нужном месте? Тут замысел в том, что <RAND-128> будет непредсказуемо менять стейт машины шифрования так, что к моменту шифрования HELLOWORLD, шифровалка будет уже в достаточно рандомном состоянии, чтобы HELLOWORLD шифровался постоянно в разные байтики. Будет ли это работать?

Кража ключа у одного из них считается провалом, конечно же.

Перемещено maxcom из talks



Последнее исправление: lesopilorama (всего исправлений: 8)

считается ли такой способ ответа на вопрос «Алиса ли прислала строку» мало-мальски вменяемым? В чём уязвимости?

Зависит от схемы шифрования «Алиса передаёт зашифрованную строку Бобу. Боб расшифровывает её ключом К, вычисляет хеш от строки (кроме поля ) и сверяет вычисленный хеш с полем» – ты ее не описал.

На второй вопрос ответ аналогичный – ты алгоритм шифрования не описал.

Теоретически анализировать можно только конкретный алгоритм, который включает в себя и алгоритм формирования ключа. Практически – нужно еще анализировать программную реализацию.

PS: если ты хочешь DSA, то используй соответствующие алгоритмы, например, из семейства ECDSA, считается, что они дают большую надежность чем, RSA DSA с той же длинной ключа.

soomrack ★★★★★
()

Начнем с того, что AES бывает разный. Если это ECB, тут есть большие сомнения в надежности этой схемы. И не понятно зачем все это изобретать, если есть GCM режим который достаточен без всяких плясок с хешом, рандомом и всем таким.

Если речь о RSA, то твое сообщение туда банально не влезет.

maxcom ★★★★★
()

Вопрос не очень понятен, требуются пояснения.

Алиса шифрует эту строку каким-то симметричным AES128 или RSA

Если это присутствует, то какие в этом ты видишь проблемы и что даст:

Алиса формирует строку вида:
<HASH>-<TIME>-HELLOWORLD-<SALT-64>

arax ★★
()

для начала стоит определиться - RSA или симметричный AES.

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

в случае с RSA - это набор из публичного и приватного ключей. в этом случае алгоритм будет такой… боб генерит пару RSA и отправляет публичный ключ алисе. она шифрует им сообщение и отправляет бобу. он расшифровывает приватным ключем сообщение. но тут засада на длинну шифрованного сообщения. там лимиты (не помню, смотри «зы»)

но… RSA - дорогой способ шифрования. поэтому используют связку RSA+AES. а именно, рса - для обмена симметричным ключем аес, а потом уже шифруют им все передаваемые сообщения

зы https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%94%D0%B8%D1%84%D1%84%D0%B8_%E2%80%94_%D0%A5%D0%B5%D0%BB%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0

ergo ★★★
()
Последнее исправление: ergo (всего исправлений: 1)
Ответ на: комментарий от soomrack

Зависит от схемы шифрования «Алиса передаёт зашифрованную строку Бобу. Боб расшифровывает её ключом К, вычисляет хеш от строки (кроме поля ) и сверяет вычисленный хеш с полем» – ты ее не описал.

«Алиса передаёт зашифрованную строку Бобу» - это не схема шифрования, это просто байтики переслать по открытому каналу.

вычисляет хеш от строки (кроме поля ) и сверяет вычисленный хеш с полем» ты ее не описал.

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

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 3)
Ответ на: комментарий от ergo

для начала стоит определиться - RSA или симметричный AES.

Спасибо, ошибка. Я нагнал про RSA, он тут ни при чём. Вычеркнул его. Речь о симметричных алгоритмах.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)
Ответ на: комментарий от maxcom

Если это ECB, тут есть большие сомнения в надежности этой схемы.

Речь про CBC скорее. Или РСВС.

Давайте по-русски: «алгоритм, шифрующий строку любой длины в строку такой же длины, шифротекст после чего выглядит как максимально рандомные байтики, не поддающиеся расшифровке без ключа и по статистическим характеристикам которых невозможно определить никакие характеристики исходного текста». То есть, по-тупому говоря «какой-то надёжный блочный симметричный алгоритм».

В чём сомнения?

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 5)
Ответ на: комментарий от lesopilorama

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

arax ★★
()

судя по описанию, тебе нужно аутентифицированное шифрование (AEAD). Не нужно придумывать велосипеды, для этого уже есть стандартизированные алгоритмы. AES-GCM, если его поддержка есть в железе. Если нет, то ChaCha20+Poly1305.

забавно, что про это написал ровно один юзер в теме. Чем тут занимаются остальные - ХЗ

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

забавно, что про это написал ровно один юзер в теме. Чем тут занимаются остальные - ХЗ

Тупорогий ТС так сформулировал вопрос, что я только после твоего сообщения понял чего он хочет.
А так да, за попытку велосипедостроения в криптографии, нужно жестко карать.

arax ★★
()
  1. я считаю вполне можно сказать что именно Алиса прислал, если хэш сошелся
  2. без хэша не понять что именно HELLOWORLD было отправлено
x905 ★★★★★
()

<TIME> - текущее время, нужное тут низачем, кроме как влиять на значение и внести немного рандома, ну и отчасти показать свои часы.

Если всё-таки нужно время сообщения, то оставить, иначе - выкинуть.

Ну, например, что не слишком в прошлом.

Боб доверяет Алисе? А то она любое время в сообщении нарисует.

ratvier ★★
()

считается ли такой способ ответа на вопрос «Алиса ли прислала строку» мало-мальски вменяемым? В чём уязвимости?

нет, потому, что я могу взять зашифрованную строку и («вскоре») послать её ещё раз, не расшифровывая.

Будет ли это работать?

посмотрите, как challenge-response протоколы устроены. не надо изобретать.

ivlad ★★★★★
()
Ответ на: комментарий от Lrrr

судя по описанию, тебе нужно аутентифицированное шифрование (AEAD). Не нужно придумывать велосипеды, для этого уже есть стандартизированные алгоритмы. AES-GCM, если его поддержка есть в железе. Если нет, то ChaCha20+Poly1305.

забавно, что про это написал ровно один юзер в теме. Чем тут занимаются остальные - ХЗ

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

lesopilorama
() автор топика
Ответ на: комментарий от akk

У AES длина ключа 128, 192 или 256 бит.

Это «внутренний ключ» - ключ для шифровального блочного многораундного ядра. Он является производным от какого-то внешнего ключа/пароля и т.п. Вы же не всегда вводите пароль 128, 192 или 256-битный, а вводите любую строку. Вот мой 512-байтный ключ - это и есть пароль, от которого мы потом как-то делаем производные 128 бит.

lesopilorama
() автор топика

Умники в треде, не отвечающие на поставленные вопросы по любым причинам («автор - дебил», не умеет формулировать, потому что Я только с четвёртого раза понял (а может ты дебил, что по 4 раза читаешь и понять не можешь?), либо «автор дебил, потому что изобретать своё шифрование - признак гидроцефала»), вы унылы и не интересны, ибо все паттерны тролления, самоутверждения и прочитанных где-то в интернете мудростей про криптографию, которые вы тут несёте, - давно известны и не новы. И без вас понятно, что изобретать своё шифрование - плохо. Задачи «не делать плохо» вообще не стояло, допускается просрать вообще все полимеры.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от maxcom

Еще как касается. IV должен быть разным каждый раз, и его надо как-то передавать. Так что это должно быть частью твоего протокола.

Почему недостаточно считать, что IV берётся из первых N бит ключа /etc/mykeyhahaha? Кажется, что это настолько неинтересная деталь, что тут достаточно ответить «у меня какой-то нормальный никому заренее неизвестный кроме алисы и боба IV», нет?

lesopilorama
() автор топика
Ответ на: комментарий от ivlad

нет, потому, что я могу взять зашифрованную строку и («вскоре») послать её ещё раз, не расшифровывая.

Да, это так. Вот отличненько, практически первая конструктивная критика в копилку)

lesopilorama
() автор топика
Ответ на: комментарий от ivlad

посмотрите, как challenge-response протоколы устроены. не надо изобретать.

Давайте чуть буквальнее. Вы тут хотите указать на то, что Алисе желательно сначала принять от Боба какую-то строку-рандомчик (челлендж), которую формирует Боб (и возможно как-то непросто), которую (строку рандомчик) Алиса должна «вшить» в токен (где-то после HELLOWORLD). Причём, для начала сойдёт даже просто какой-то тупой рандом, который Боб сохранил в ОЗУ и может потом проверить, что он её генерировал.

lesopilorama
() автор топика
Ответ на: комментарий от ratvier

Да, спасибо. Это годная критика, <TIME> очень тупо: требует доверия Алисе и непонятно какой несёт функционал вообще. К тому же можно посылку от Алисы просто скопировать и повторить в Боба ещё раз и это проканает. Нужен челлендж от Боба.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

Нужен челлендж от Боба.

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

arax ★★
()
Последнее исправление: arax (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

Тогда, Алиса может генерировать уникальный идентификатор сообщения(например GUID), а Боб хранить идентификаторы всех обработанных сообщений.
Но в этом случае порядок сообщений от Алисы уже не гарантировано будет оригинальным, что в определенных случаях тоже может быть уязвимостью.

arax ★★
()
Ответ на: комментарий от lesopilorama

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

Я вообще не понимаю зачем все это. Если цель чисто аутентифицировать отправителя, то достаточно просто HMAC-SHA256. Если нужно еще и скрыть контент (который имеет сомнительную ценность в данном случае), то есть AES-GCM.

maxcom ★★★★★
()
Ответ на: комментарий от lesopilorama

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

ratvier ★★
()

Если все проверки - true, тогда Боб делает вывод, что строка пришла от Алисы, а не кого-то другого.

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

если Боб не верит Алисе и считает, что она может слить всю хурму кому угодно - тогда заявленное решение не работает.

обеспечить защиту от MITM, который будет спамить повторами сообщений, это вопрос из другой оперы.

olelookoe ★★★
()
Ответ на: комментарий от lesopilorama

Ослабляю неслучайным IV потому, что не знаю как Боб узнает IV Алисы.

IV надо просто передать вместе с шифрованным текстом в нешифрованном виде. Его не нужно прятать, он не является ключем. Главное чтобы каждая операция шифрования стартовала с нового случайного IV.

maxcom ★★★★★
()