Как реализовать клиент KMS как можно более независимым от сервера?

Приложение, которое должно получать закрытые ключи (в основном RSA) из системы управления ключами (KMS), который может быть модулем аппаратной безопасности (HSM), что может быть лучшим способом реализовать такой клиент, если нет возможности заранее узнать KMS реализацию, с которой придется иметь дело приложению?


Подвопросы вытекают из основного:

  1. Is there a unified client library that tries to close the gap between different implementation?
    • One that targets KMIP (Key Management Interoperability Protocol) implementations at least would be a good example.
    • Для какого языка? Чем больше одна и та же библиотека нацелена, тем лучше.
    • Есть ли такой для Java (на чем будет работать мое приложение, но я пытаюсь оставить вопрос открытым)?
  2. If there's none or little that aims multiple server implementations, are there specific clients for specific implementations? I'm thinking mostly about the most used ones amongst SMBs (Small and medium size businesses) and big companies.
    • What language is it for? The more a same library aims, the better.
    • Есть для Java?
  3. If none of those actually exist or if there's no client library for the implementation most needed, what would be the best way to design the application to be easily adaptable in the future to other implementations while focusing on a first one?
    • I guess it would be a good idea to focus on a KMIP compliant one first?
  4. Есть ли в Интернете реальные образцы рабочего кода? Даже UML диаграмм? Этот вид ресурсов кажется довольно скудным.
  5. Я просто глуп, думая, что все, что существует, и все эти реализации на самом деле используют RESTful API, и все должно быть реализовано на стороне клиента, чтобы адаптироваться к любым реализациям сервера?

Бонусный вопрос:

Соответствует ли Cloud Key Management Service KMIP Google или нет? Похоже, это не так, но мне не удалось найти ясно yes ни ясно no.


Другие полезные ресурсы:


person Vrakfall    schedule 01.08.2018    source источник
comment
У меня есть ответ на бонусный вопрос: Google Cloud KMS/Cloud HSM не совместим с KMIP; мы заинтересованы в этом, но протокол плохо согласуется с работой в качестве службы. У меня нет пропускной способности, чтобы обсуждать остальное прямо сейчас, но я не знаю хорошего мультисервисного клиента абстракции. Всегда рады дальнейшему обсуждению по адресу [email protected].   -  person Tim Dierks    schedule 02.08.2018
comment
@TimDierks Большое спасибо, теперь все ясно. Я должен воспользоваться тем, что вы непосредственно вовлечены в этот продукт, чтобы спросить вас еще один вопрос о Google Cloud KMS. Я сделал это в другой ветке вопросов, так как это уже далеко от первой темы здесь, и я уже должен был сделать это для бонусного вопроса. Я чувствую, что там также лучше, чем по электронной почте, чтобы другие люди также могли увидеть ответ на него.   -  person Vrakfall    schedule 02.08.2018
comment
Рассматривали ли вы возможность использования Tink? Я полагаю, что он направлен на предоставление клиентской библиотеки управления ключами, которая абстрагирует некоторые детали взаимодействия с несколькими различными системами управления ключами, включая Google Cloud KMS.   -  person Russ Amos    schedule 02.08.2018
comment
@RussAmos Аккуратно, кажется, он делает хотя бы часть того, что мне нужно. Там все еще что-то размыто. Например, не похоже, что я могу использовать его для получения закрытого ключа и использовать его с другой библиотекой, которая не реализует Tink, или я что-то неправильно понимаю? Я видел, что есть возможность реализовать примитивы, но я не понимаю, поможет ли это мне обернуть криптобиблиотеку, не связанную с tink. Я собираюсь опубликовать вопрос на их github, чтобы прояснить это.   -  person Vrakfall    schedule 03.08.2018
comment
Кстати, проблема здесь. :)   -  person Vrakfall    schedule 04.08.2018
comment
Я не знаю ответ; надеюсь, разработчик Tink сможет ответить. Однако обратите внимание, что Google Cloud KMS не экспортирует закрытые ключи. Для этого вам нужно будет использовать другой KMS (если только сервер SSH не использует закрытый ключ, вызывая Cloud KMS API; я не знаю ни одного SSH-сервера, который имеет такую ​​возможность). Если бы я использовал Cloud KMS для этого, я бы создал симметричный ключ шифрования в KMS и использовал его для шифрования локального файла, содержащего закрытый ключ, который я сгенерировал локально, а затем расшифровал и использовал закрытый ключ по требованию.   -  person Russ Amos    schedule 06.08.2018