2017-02-13 21 views
2

Я обслуживаю данные через частный API, и я хочу их подписать. Мой пользователь немного параноик и хранит данные самостоятельно. Они хотят быть уверенными, что данные, которые они сохранили, пришли от меня и с тех пор не были изменены кем-либо. Я не могу использовать только https, потому что Https просто подтверждает личность сервера. Этого недостаточно, они хотят быть уверенными, что данные не меняются, даже я не могу их изменить.Как подписать данные, обслуживаемые API

Вот что я хочу сделать.

  1. Создайте контрольную сумму данных chanck с помощью sha1 или еще.
  2. Создайте цифровую подпись этой контрольной суммы, чтобы присвоить сертификат собственного самописца.
  3. служат через https контрольную сумму, ее подпись и мой открытый ключ.

Мои вопросы:

  • Является ли это правильный способ сделать это?
  • Должен ли я покупать сертификат для органа, такого как Comodo или Symantec?
  • Могу ли я подписать свою контрольную сумму, используя свой сертификат https?
  • Если я покупаю сертификат от органа власти, что произошло, когда оно истекает? Является ли моя прежняя подпись контрольной суммы действительной?
+0

Как «вы подписываете сообщение своим личным ключом» защищаете данные от их изменения? –

+0

Он работает только потому, что хранит копию данных и контрольную сумму. Если мы не можем доверять друг другу, нам понадобится более решительное решение, такое как blockchain. Вы также можете вызвать кратковременную часть и разрешить только подписывать данные. таким образом, я не смогу производить больше подписанных данных без его согласия. – Jerome

ответ

1
  1. Создание контрольной суммы chunck данных с использованием sha1 или другого.

  2. Построить цифровую подпись этой контрольной суммы присвоить сертификат собственного самописца.

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

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

  1. передать через https контрольную сумму, ее подпись и мой открытый ключ.

Необходимо отправить подпись, а не контрольную сумму. На самом деле https не понадобится для отправки подписи (но рекомендуется), потому что цифровая подпись защищает содержимое сообщения и идентифицирует подписчика

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

Должен ли я покупать сертификат для органа, такого как Comodo или Symantec?

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

Могу ли я подписать свою контрольную сумму, используя свой сертификат https?

Нет, сертификаты https должны использоваться для соединений SSL и имеют определенное использование ключа. В зависимости от программного обеспечения, используемого вашим клиентом, может отклонить подпись

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

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