LINUX.ORG.RU

Простой аналог ЭЦП на коленке

 , ,


0

1

Поскажите, как бы вы решили такую задачу без openssl, сертификатов, RSA и тп. (md5, sha1, и тп использовать можно)

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

Соответственно клиент должен знать некий сферический открытый ключ сервера, а сервер передавать вместе с файлом некий ЭЦП.

Предположим код клиента доступен для чтения, поэтому нельзя использовать нечто вроде эцп=md5(md5(file)+открытый ключ), потому что подделать эцп для любого файла будет просто.

Если брать что то вроде эцп=md5(md5(file)+закрытый ключ), то непонятно как проверять его на клиенте, не передавая закрытый ключ.

Язык программирования не важен, просто интересно реально ли такое сделать (генерить открытый, закрытый ключ и эцп), не велосепедя RSA какой-нибудь.

★★★★★

велосепедя RSA

Что там велосипедить-то, несколько несложных формул. Но велосипедить всеравно не стоит, т.к. уязвим не алгоритм, а конкретные реализации.

anonymous
()

Простой аналог ЭЦП на коленке

убедиться что он пришел от нужного сервера, не побился и не был подменен

Классические параграфы. Неужели ты думаешь, что gpg-сотоварищи специально усложнены?

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

Неужели ты думаешь, что gpg-сотоварищи специально усложнены?

Видимо нет, во всяком случае простого решения я не вижу :)

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

Делает именно то

Еще одна эцп на основе экзотического публичного ключа имплементации которого хрен найдешь?

bj
()

HMAC тебе надо.

не передавая закрытый ключ.

А без этого никак. Либо сторонняя authority, которая подтверждает подлинность сервера, либо передача секретного ключа каким-то другим способом.

Если злоумышленник умудряется перехватить передачу файла, кто мешает ему перехватить html'ку с текстом открытого ключа?

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

Если злоумышленник умудряется перехватить передачу файла, кто мешает ему перехватить html'ку с текстом открытого ключа?

Считаем что открытый ключ рид-онли и «вшит» в клиент

xorik ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

кто мешает ему перехватить html'ку с текстом открытого ключа?

Кажись, кто-то не совсем понимает ассиметричную криптографию. ;)

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

beastie ★★★★★
()

Поскажите, как бы вы решили такую задачу без openssl

не надо решать эту задачу без openssl, проще его осилить

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

даже подсказку дам, всё делается одной командой «openssl dgst», читай соответствующий ман

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

либа не нужна, бинарь openssl и так есть практически в любой *nix системе

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

HMAC тебе надо.

А нет, оно симметричное, не прокатит

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

наверное он говорит про подмену открытого ключа

От чего, собстенно, ассиметричная криптография и защищает. ;)

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

не, не защищает

Защищает, закрытый для подписи, открытый для проверки. Зная открытый не получить закрытый

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

Зная открытый не получить закрытый

а откуда ты будешь уверен, что ты именно тот, правильный открытый ключ знаешь? :)

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

Подпись — это не шифрование. Точне почти тоже самое, но в обратную сторону.

Сообщение подписывается закрытым ключём. Открытый ключь раздаётся всем желающим.

Имея открытый ключь, ты можешь сказать верная ли подпись — да или нет. И всё.

Подменив открытый ключь, мы получим «нет».

Подменив сообщение, мы получим «нет».

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

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

ну вот, как я и говорил, нужен физический контакт для передачи ключа

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

Я неправильное слово использовал. Вместо «перехватить» нужно было использовать «подменить». Если есть возможность показать пользователю произвольную информацию, никто не может запретить сгенерировать новую пару ключей и подписать новым ключом поддельный файл, а пользователю показать подконтрольный открытый ключ.

i-rinat ★★★★★
()
Ответ на: комментарий от beastie

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

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

ключ без мягкого знака пишется

Harald ★★★★★
()
Ответ на: комментарий от i-rinat

Да, тут я согласен. Кому-нибудь, да доверять надо: или ключу или сообщению. Полученные по одному каналу сообщение и ключ доверию не подлежат.

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

Думаю он имеет ввиду подмену открытого ключа на свой.

Suntechnic ★★★★★
()

Симмитричное шифрование зря выкидываешь. Оно-то тут тебя и спасет. Без знания алгоритмов никто тебя не взломает. При определенных навыках подбор/угадывания по какому методу ты шифруешь может занять десятилетия (читай, меняю алгоритм каждый год).

Проблема тут другая: люди — главная дыра. Кто-нить может взять и унести сервак к себе домой/продать/и т.п.

gh0stwizard ★★★★★
()

Вообще, проблему на уровне доставки решает VPN, IPSec. Туннель IPSec сложно скомпроментировать, а при настроенном файрволле так вообще не прошибешь.

Что касается самих файлов, то можно воспользоваться PGP (лучше локально развернутом).

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

то можно воспользоваться PGP (лучше локально развернутом).

а то многие любят пользоваться облачным PGP? :)

Harald ★★★★★
()

Поскажите, как бы вы решили такую задачу без openssl, сертификатов, RSA и тп. (md5, sha1, и тп использовать можно)

Как приготовить пельмени, но без теста? Серьезно?

GnuPG, не? Да, там есть ключи. Но это лучше, чем твоя идея изобрести велосипед.

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

А пройтись по ссылкам, не? ;)

Первым же делом прошелся. Сишка в самом худшем ее виде. За байтолюбством алгоритма не видать.

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

За байтолюбством алгоритма не видать.

А djb по другому не умеет, но мужик он всёж головастый. ;)

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

Симмитричное шифрование зря выкидываешь

Если ключ один на клиенте и на сервере, а на клиенте он в открытом виде, то безопасность нулевая

Без знания алгоритмов никто тебя не взломает

Ну смотри, например у нас есть некий открытый ключ, например у нас алгоритм: циклично смещаем на пару байт и делаем xor md5 файла с ключем. Т.к. код клиента открыт любой кулхацкер сможет по открытому ключу собрать закрытый.

Поэтому тут надо такой алгоритм, который позволяет получить открытый ключ из закрытого (но не наоборот), сгенерировать закрытым ключем подпись и проверить открытым ключем её.

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

Без знания алгоритмов никто тебя не взломает.

Security through obscurity ломается первой. Конфиденциальность должна зависить от ключа, а не алгоритма. Проприсные истины же.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Всем спасибо, решил взять openssl и не велосипедить. Вопрос был скорее академический

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

Не зная закрытого ключа, которым была сделана подпись

Не «закрытого», а секретного.

anonymous
()
Ответ на: комментарий от beastie

Security through obscurity ломается первой.

Тут еще эффект Неуловимого Джо играет роль.

anonymous
()

Твоя проблема в том виде в котором ты описал решается HTTPS. + extended ev сертификаты. Корневые сертификаты должны быть вшиты в программу-качалку https/tls траффика. Сервер, с которого производится считывание, должен иметь ev сертификат.

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

Т.к. код клиента открыт

Про это я не знал. Из постановки задачи неясно какой клиент и какой сервер. Я понял, что оба закрытые.

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.