> А любые публичные ключи наверное тогда вообще полный пи...ц? Ведь там даже
> не хэш а целиком ключ бывает. И если что - ремота
> в OTR знает fingerprint ключа другой стороны.Пользователь с другой стороны знает -- отлично. А человек по-середине не должен. В данном случае вы сливаете то что можно будет подобрать (хэш).
> блин, перцы, если у меня уже есть shared secret с
> ремотой - зачем мне вообще диффи-хеллманы и публичная криптография вообшще, интерсно?
> Можно втупую симметричное шифрование вкатить и не заморачиваться :)
Вот на этом и закончим этот тред. DH нужен для установления сессионных одноразовых ключей, чтобы при компрометации shared ключа нельзя было дешифровать ранее перехваченный трафик. Свойство это называется perfect forward secrecy. Более того: как вы аутентифицируете противоположную сторону при установлении соединения? Будете просто посылать сразу данные, ведь всё-равно их дешифровать не смогут, сливая факты возникновения пакетов и их размеры? Без всего этого можно обойтись, но для кого-то тот же PFS штука обязательная. Если аутентифицировать противоположную сторону (есть симметричные алгоритмы для этого), то найдутся и симметричные алгоритмы для установления сессионного ключа: но зачем когда есть довольно быстрый curve25519 уже?
> Для этого надо или найти коллизии в функции хэширования
Верно. Но эта возможность остаётся. Тогда как в zero knowledge системах нет.