Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Шифровка-расшифровка в несколько ключей


Автор: sergejzr 16.11.2006, 14:12
Ребята, кто дружит с криптографией. Нужен алгоритм шифровки/дешифровки. Попробую описать..

Pt - Открытый текст
Ct - Шифровка
Ks={K0,K1,..Kn} - несколько ключей К0!=K1!=K2!=...Kn

encode - функция шифрования так, что Ct=encode(Pt,Ks)
decode - функция расшифрования так что - Pt=decode(Ct,K0)=decode(Ct,K1)=....decode(Ct,Kn)

Не существует такого ключа K*, чтобы decode(Ct,K*)=Pt и K* не являлся бы элементом из Ks (Ну это в идеале)

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

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




Автор: maxim1000 16.11.2006, 15:09
а что если под зашифрованным текстом понимать просто набор исходных текстов, зашифрованных каждым ключом в отдельности?
(количество ключей большое?)
т.е., по сути, просто для каждого человека отдельно создаётся свой зашифрованный текст, а хранятся они вместе...

Автор: sergejzr 16.11.2006, 15:35
Да, это мне тоже первым делом пришло в голову. но тут много потенциальных атак можно произвести. Если враг знает, что текст повторяется.
А врагом может быть и тот, у кого вчера был доступ. Он просто стырит чужой ключ.

Автор: sergejzr 16.11.2006, 21:18
Xex smile Придумал! Надо пермутировать получившийся массив и к ключу позиции сохранять. Закодю, потестю, отпишусь smile

Автор: sergejzr 17.11.2006, 00:08
Только проблема, как пермутировать так, чтобы только имеющий ключ знал "свои места". Ведь слов кодировать надо будет много и в идеале в каждом слове позиции вырешиваются в зависимости от связки слово/ключ.

Автор: maxim1000 17.11.2006, 01:09
Цитата(sergejzr @  16.11.2006,  14:35 Найти цитируемый пост)
А врагом может быть и тот, у кого вчера был доступ. Он просто стырит чужой ключ.

как? он их и знать не будет
грубо говоря, получается что-то вроде рассылки
как только кто-то стал врагом, посылок, адресованных ему просто не делается

Цитата(sergejzr @  16.11.2006,  14:35 Найти цитируемый пост)
но тут много потенциальных атак можно произвести. Если враг знает, что текст повторяется.

что правда, то правда...

Автор: sergejzr 17.11.2006, 13:14
Цитата(maxim1000 @  17.11.2006,  00:09 Найти цитируемый пост)
как? он их и знать не будет

Цитата(sergejzr @  16.11.2006,  14:35 Найти цитируемый пост)
текст повторяется


Я вот думаю насчёт пермутаций.. но как их сделать однозначными для каждого ключа и неоднозначными для разных слов....

Автор: Alexandr87 19.11.2006, 15:06
У каждого участника обмена есть пара ключей (открытый, закрытый).
При передачи сообщения - генерируется сессионый ключ, данным ключом шифруется исходное сообщение. 
Далее, этот сессионый ключ шифруется ассиметрией для каждого, кто должен прочитать это сообщение, и включается в сообщение.

Автор: sergejzr 15.2.2007, 23:46
Оказывается ещё в 70-х появился очень простой вариант smile

Берём многочлен прибавляем к наему наш секрет. Если полином - парабола, берём несколько случайных точек на ней. каждые 2 точки однозначно опишут эту параболу. Делим по точке между людьми, одна - открытая. Каждые 2 точки однозначно опишут эту параболу а значит двое могут однозначно узнать секрет. Вариант раширяется по вкусу smile

Автор: Alexandr87 16.2.2007, 06:17
можно посмотреть реализацию или пример "на словах"?

Автор: sergejzr 16.2.2007, 11:40
Alexandr87, http://en.wikipedia.org/wiki/Shared_secret возможно более понятное описание. А пример будет, но попозже.

Автор: Alexandr87 16.2.2007, 18:37
Цитата(sergejzr @  16.2.2007,  14:40 Найти цитируемый пост)
Alexandr87, вот возможно более понятное описание.


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

Цитата(sergejzr @  16.11.2006,  17:12 Найти цитируемый пост)
Поясню, область применения.
Существует закодированная мессага, несколько человек могут (каждый своим ключём) расшифровать её. Теперь одному из них хотим закрыть доступ. для этого кодируем мессагу заного, но уже без учёта его ключа. Ессно исходя из этого, все ключи должны быть разными.


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

На мой взгляд вам все же стоит взглянуть на это, так как такой способ является наиболее простым (честно говоря, я даже не подразумеваю, как это можно сделать по-другому, но не исключаю факт, что можно)
Цитата(Alexandr87 @  19.11.2006,  18:06 Найти цитируемый пост)
У каждого участника обмена есть пара ключей (открытый, закрытый).
При передачи сообщения - генерируется сессионый ключ, данным ключом шифруется исходное сообщение. 
Далее, этот сессионый ключ шифруется ассиметрией для каждого, кто должен прочитать это сообщение, и включается в сообщение.



Автор: sergejzr 15.3.2007, 12:42
Цитата(Alexandr87 @  16.2.2007,  17:37 Найти цитируемый пост)
Здесь же описывается механизм разделения секретов, он никого отношения не имеет  к ситуации описанной вначале и применяется совершенно в других случаях.

И в других и в это так же smile

Цитата(Alexandr87 @  16.2.2007,  17:37 Найти цитируемый пост)

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

Перехват части, предназначенной для другого участника не учитывается в моём случае. Поскольку у настоящих участников и так имеется одна координата, а врагу достаточно ключа любого из них (что само по себе не зависит от способа шифрования). Так же например Ваш способ:
Цитата(Alexandr87 @  16.2.2007,  17:37 Найти цитируемый пост)
У каждого участника обмена есть пара ключей (открытый, закрытый).
При передачи сообщения - генерируется сессионый ключ, данным ключом шифруется исходное сообщение. 
Далее, этот сессионый ключ шифруется ассиметрией для каждого, кто должен прочитать это сообщение, и включается в сообщение.

Если враг получит ключ любого из участников, он ломает мессагу. Т.е ничем не отличается от "многочленного" шифрования.


Автор: Alexandr87 16.3.2007, 06:15
Цитата(sergejzr @  15.3.2007,  15:42 Найти цитируемый пост)
Перехват части, предназначенной для другого участника не учитывается в моём случае. Поскольку у настоящих участников и так имеется одна координата, а врагу достаточно ключа любого из них (что само по себе не зависит от способа шифрования). Так же например Ваш способ:


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

Объясните пожалуйста на примере: вот у вас есть три получаетеля: A,B,C. Первый раз вам нужно передать секрет один S1 всем трем участникам, второй раз секрет S2 получаетелям A и B.
Я никак не могу увидеть применения вашего метода для решения этой задачи. Задача сформулирована вами
Цитата

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


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)