Pull to refresh

Comments 17

Зачем вы используете mcrypt для симметричного шифрования, а openssl для асимметричного?
От mcrypt давно уже пора отказаться в пользу openssl, к тому же в версии PHP 7.1 он объявлен, как deprecated.

Почему вы выбрали шифр MCRYPT_RIJNDAEL_256? Если вы хотели использовать AES-256, то ошиблись.
AES-256 — это MCRYPT_RIJNDAEL_128 с 256-битным ключём.
хорошая мысль, если буду довносить функционал — переименую ))

Я правильно понимаю, что SIGNATURE_KEY попадает заранее на обе машины, притом по некоему безопасному каналу? А почему бы тогда не использовать его как постоянный ключ для симметричного шифра?

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

Так сделать его достаточно длинным, чтобы сделать подбор экономически нецелесообразным?
Да, и, если не ошибаюсь, проще подобрать два ключа по 60 бит, чем один по 120.

да, я именно с этим расчетом SIGNATURE_KEY не симметричный ключ, хотя мог бы им быть
«можно будет расшифровать публичный ключ которым обмениваются сервера» — публичный ключ тоже генерируется для каждого экземпляра класса новый, тут все впорядке

Алгоритм, безусловно, хороший, но есть два замечания-предложения:


1) Способ с дополнительной проверкой отправителя сделан правильно, но для полной защиты от ФБР от вмешательства (MITM) было бы правильно включить в сообщение хэш от всего. Не знаю как правльно, но я делал бы от SIGNATURE_KEY + симметричный ключ. Поправьте если что.


2) Это уже больше не замечание, но если пишешь на PHP то это вроде как сервер. И тогда правильнее писать вторую сторону не на этом же PHP, а JS. В итоге получается клиент-серверная инфраструктура с шифрованием.

касательно связки PHP и JS — вы прямо в точку… я просто не хотел в тексте упоминать, чтобы это не было рекламой, но в комментарии, допускаю небольшой самопиар — у меня есть еще проект (чисто для себя и тех кому интересно) именно работающий на связке js и Php — чат мессенджер со сквозным шифрованием. Даже значок карандашика сквозным передается. Время разработки 2,5 недели (но это я плотно вчитывался в крипто литературу… так-то я далек от нее — сейчас, боюсь не смогу воспроизвести — нужно время на погружение), поэтому возможны легкие косяки… код открыт и тоже на гите. Проект — криптограм.впрограмме.рф
Чем не устроили torchat и другие готовые решения?
просто хотел написать лично для себя шифрованный мессенджер. давно хотел. вот и сделал)
Фига тут велосипедисты) Мне кажется, что такую проблему решили уже огромное количество раз. Да и протокол Диффи Хельмана не просто так придумали.
это действительно велосипед. Просто люблю делать все сам. Хотелось немного разобраться как это все работает, ну и поделиться по возможности
толкен

От слова talken что ли?


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

Sign up to leave a comment.

Articles