алгоритм для нескольких цифровых подписей? - PullRequest
3 голосов
/ 03 августа 2010

предположим, у меня есть пакет данных и что я отправляю данные 10 пользователям. Я хочу добавить атрибут к этим данным, что-то вроде цифровой подписи. У каждого из 10 пользователей будет свой «ключ». Когда они применяют свой ключ к этой специальной подписи в пакете данных, он возвращает либо true, либо false. Однако они не могут определить, используя свой ключ, являются ли другие пользователи истинными или ложными.

Ответы [ 3 ]

3 голосов
/ 03 августа 2010

Даже если пакет данных большой:

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

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

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

0 голосов
/ 03 августа 2010

Вы не можете отправить менее n бит по каналу для достижения этого, где n - количество пользователей.

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

Итак, вот оно,

DATA=random(128)
result = DATA  
For each user:  
    bit= MSB(HMAC(DATA,user["key"]))
    bit= bit xor user["true/flase"]
    result.append(bit)  
0 голосов
/ 03 августа 2010

Предполагается, что пакет данных мал:

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

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

Если пакет данных содержит только информацию true или false, вы также можете просто зашифровать это значение (и краткую соль для рандомизации результатов) ключом получателя.В этом случае все получатели смогут расшифровать что-либо - True или False.

...