4

Гипотетический здесь. У вас есть высокочувствительный файл, который вы не хотите публиковать никогда, другие люди также не хотят, чтобы он был общедоступным. Чтобы уменьшить вероятность быть убитым, вы публикуете зашифрованную версию файла на bittorrent и даете ключи шифрования доверенным сторонам ("держателям ключей") с инструкциями по публикации, если вас убили. Затем вы обнародуете, что ваши опубликованные файлы являются подлинными. (Да, мы говорим о ситуации с Мэннингом.)

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

  1. Опубликовать открытый текст документа
  2. Используйте заявление об аутентификации, которое вы опубликовали, чтобы довести до сведения общественности, что открытый текст является подлинным (то есть удалите ваше правдоподобное отрицание)
  3. Оставаться анонимным

Например, вот один из способов сделать это.

  1. Создайте N симметричных ключей, по одному для каждого держателя ключей
  2. Для каждого владельца ключа сделайте копию открытого текста и добавьте к нему «Этот документ был выпущен:» и личность этого владельца ключа.
  3. Зашифруйте каждую копию с помощью соответствующего симметричного ключа
  4. Распределить ключи соответственно
  5. Опубликуйте полный файл

Однако для этого требуется пространство N * size_of_plaintext . Этот вопрос задает, есть ли более эффективный способ .

Для начала я исследовал gpg-шифрование с несколькими ключами. См. Https://stackoverflow.com/questions/597188/encryption-with-multiple-different-keys (спасибо @terdon). GPG работает следующим образом:

gpg --encrypt --recipient alice@example.com --recipient bob@example.com doc.txt
  1. GPG выбирает симметричный ключ (X)
  2. GPG шифрует открытый текст с помощью X
  3. GPG шифрует X с помощью сторонних ключей P_alice , P_bob , ... и Алиса, Боб и т.д. Каждый может расшифровать один из них

Это уязвимо для атаки, которую мы хотим избежать:

  1. Боб использует P_bob для расшифровки X
  2. Боб публикует X анонимно
  3. Публика расшифровывает ваш опубликованный открытый текст X

3 ответа3

3

Вы можете опубликовать подходящий набор криптографических хэшей открытого текста. Например, если опубликовать набор хешей открытого текста [ MD5, SHA-1-160, SHA-3-512, RIPEMD-320 ], то найти любой открытый текст, который одновременно будет соответствовать всем этим хэшам, будет чрезвычайно сложно. Обратите внимание, что такая атака будет значительно сложнее, чем первая или вторая атака с прообразом любого из задействованных алгоритмов хеширования, поскольку одни и те же данные должны хешировать правильное значение для всех задействованных алгоритмов и иметь смысл при чтении. Кроме того, из них, согласно Википедии, по крайней мере, SHA-3-512 и RIPEMD-320 в настоящее время неизвестно, чтобы иметь какие-либо атаки лучше, чем грубая сила против полного пространства вывода, и в то время как MD5 имеет столкновительную атаку сложности 2 ^ 21 Атаки с прообразом по-прежнему составляют 2 ^ 123, что лишь незначительно менее сложно, чем тотальная атака на полном выходном пространстве 2 ^ 128. (По сути, при столкновительной атаке вы выбираете оба входа и ищете пару разных входов, которые генерируют идентичные хэши, так что хеш для одного также действителен для другого; атака с прообразом - это когда у вас есть хеш и ищем некоторый ввод, предпочтительно тот, который отличается от исходного ввода, который производит данный хеш.) Эти хэш-значения сами по себе ничего не говорят о незашифрованных данных.

Чтобы еще больше усложнить атаку, вы можете использовать по крайней мере один криптографический алгоритм хеширования, который не основан на конструкции Меркле-Дамгарда с традиционной функцией сжатия (которую перечисленные выше алгоритмы хеширования, возможно, за исключением SHA-3, представляют собой:) если такой зверь существует; Я не знаю ни о чем из головы, но это не исключает возможности. По-видимому, в Keccak/SHA-3 используется дизайн, который по крайней мере отличается в некоторых частях, что, по-видимому, делает его хорошим кандидатом для включения в такой набор алгоритмов хеширования.

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

Тем не менее, я не думаю, что вы сможете получить реальную ответственность за то, кто утек ключ дешифрования, не распространяя несколько копий открытого текста с различным шифрованием. Любая схема шифрования с несколькими ключами, которая не требует отдельного зашифрованного блока данных для каждого блока открытого текста и ключа получателя, потребует, чтобы открытый текст был зашифрован с использованием заданного ключа K_0 который затем, в свою очередь, зашифровывается с помощью каждого из набора ключей получателей от K_1 до K_n , для n получателей, и что полный набор зашифрованных мастер-ключей E(using K_n)(K_0) включен в зашифрованный текст. (В любое время, когда вы этого не хотите, вам нужно несколько шифротекстов для каждого открытого текста, который представляет увеличенную поверхность атаки для атакующего, что вызывает беспокойство, если вас зовут Мэннинг или Сноуден.) Следовательно, каждый получатель по необходимости имеет доступ к "главному" ключу дешифрования K_0 , представляющему именно тот сценарий, от которого вы ищете защиту.

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

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

0

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

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

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

0

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

Что-то вроде того, что описано здесь, я полагаю, поскольку вы используете gpg: http://www.tutonics.com/2012/11/gpg-encryption-guide-part-3-digital.html

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .