Size: a a a

Clojure — русскоговорящее сообщество

2019 December 11

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
надо не "скрыть", надо верифициоровать обладание токеном1 подписавшему токен2
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
т.е. верифицировать всю цепочку подписей
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
НЕЛЬЗЯ получить token2 не обладая token1
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
при подписи токена2, надо взять токен1, взять от него хэш, и этот хаэш использховать дальше
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Andrew Rudenko
о, ребят, давайте спрошу, вдруг кто в курсе, у меня тут проблемка:

Есть unforgeable токен (token1), которые нужно иметь возможность "оборачивать" (token2), т.е. добавлять новую информацию (data2) и подписывать своим ключом(secret2). Должны соблюдаться следующие условия:

1. Обладая token2 не должно быть возможности получить валидный token1
2. Верификатор должен иметь возможность проверить валидность всей цепочки.

Структрура токенов примерно следующая:

token1 = data1.apikey1.signature1
 where signature1 = sign(data1.apikey1, secret1)

token2 = data1.apikey1.data2.apikey2.signature2
 where signature2 = sign(data1.apikey1.signature1.data2.apikey2, secret2)


Используя hmac с симметричными ключами это легко сделать (apikeys в данном случае это просто идентификаторы по которым верификатор получает секреты), на этапе верификации мы просто воспроизводим всю цепочку и сравниваем итоговую подпись. Однако этот подход требует знания верификатором всех секретов.

Идеально было бы использовать асимметричные подписи: подписывать данные разными приватными ключами аккумулируя результат в одну подпись (сохраняя валидным требование 1.), проверять списком публичных.

Наиболее точное описание того, что я хочу я нашел тут [1], но оно все что дальше введения сильное академично, без имплементаций. Возможно, я просто не знаю как надо искать и это общеизвестный алгоритм? Или я хочу неправильного? Спасибо.

[1] https://eprint.iacr.org/2005/335.pdf
вот тут по линку это тоже все описано https://eprint.iacr.org/2005/335.pdf
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
токен1 по нему не восстановится, но тот кто знет токен1 тот может проверить валидность
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Maxim Penzin
токен1 по нему не восстановится, но тот кто знет токен1 тот может проверить валидность
верификатор не знает token1
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
верификатору приходит только token2
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
и верификатор знает приватные ключи
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
(в случае с симметричной криптой)
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Andrew Rudenko
и верификатор знает приватные ключи
вопрос в том как вот это перевести в "верификатор знает только публичные ключи"
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Andrew Rudenko
вопрос в том как вот это перевести в "верификатор знает только публичные ключи"
верификатор оба публичных ключа знает?
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
ну значет он может проверить обе подписи, и первую и вторую.
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Да
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
По кругу? )
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
даже не важно, что там подписывали на самом деле.
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Andrew Rudenko
1. либо ты никак не включаешь в подпись token2 подпись от token1 и тогда верифификация всей цепочки становится невозможна
2. либо ты плейнтекстом включаешь подпись token1 в token2 и тогда любой обладатель token2 может получить token1
.
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Вот допустим мне пришла некая подписанная хрень от "Васи", я подписываю ее своим ключом и отправляю тебе.
Ты знаешь и мой пабкей и васин,
проверяешь, что это подписал я, а то, что пришло мне подписал Вася.
Ни я за Васю не могу сгенерить ни он за меня.
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
вот цепочка
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
1. из изначальных условий говорит о том, что обладая тем, что ты подписал от Васи, я не могу получить оригинальную "подписанную хрень"
источник