о, ребят, давайте спрошу, вдруг кто в курсе, у меня тут проблемка:
Есть 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