Нужен код проверки подписи ЕСС160 на C#

Проверка подписи ЕСС160 непосредственно в коде приложения - это предпочтительный метод.

Для этой цели, как написано в документации, вы и поставляете код для проверки подписи ЕСС160 на С (С++) в файле VerifySign.c

К сожалению, нам не удается воспользоваться этим кодом в приложении на .NET (очень! не хочется подгружать в него Native код).

Также не удается воспользоваться для этой же цели библиотекой "opencrypto.net" (Domain=secp160r1, насколько я понял, соответствует алгоритму ECC160)

Исходные коды библиотеки opencrypto.net доступны под MIT-лицензией по адресу:

https://github.com/kazuki/opencrypto.net

Судя по всему есть какое-то несовпадение в формате представления ключей.

Прошу или предоставить корректный код на C# для проверки подписи ECC160 или пояснить, как преобразовать экспортируемый публичный ключ ЕСС160 в формат, подходящий для создания экземпляра ECKeyPair библиотеки "opencrypto.net".

Re: Нужен код проверки подписи ЕСС160 на C#

Здравствуйте, anatolyvolodko.

В первую очередь хочу обратить внимание на то, что в нашем стандартном примере для .Net (все примеры можно найти в папке "Samples" установленного комплекта разработчика, директория по умолчанию: " %Program Files%\Guardant\Guardant 6\%Public Code%\Samples\") есть описание использования функций Guardant API,  в том числе и для подписи (и проверки подписи) блока данных.

Уточните, пожалуйста, по какой причине не подходит стандартный способ использования аппаратного реализованного в современных электронных ключах алгоритма ECC160?

(2013-04-10 13:41:37 отредактировано anatolyvolodko)

Re: Нужен код проверки подписи ЕСС160 на C#

Стандартный подход требует наличие Handle на Guardant Api для проверки подписи.

Таким образом, любой код, который захочет проверить подпись, должен не только подключить прямо или косвенно Managed API Guardant, но и загрузить в свой процесс unmanaged код (помимо прочего зависимый от архитектуры X86/x64/ARM и т.д.).

Для Silverlight приложений это неприемлемо в принципе.

Тем не менее, нам необходимо быть убежденными, что сервис вернувший некоторые данные - это именно наш сервис.
Причем для нас существенно, чтобы в коде сервиса не хранился и даже не появлялся в памяти приватный ключ (в противном случае с помощью дебаггера можно будет этот приватный ключ снять и подменить наш сервис.

Мы предполагали это достигать тем, что подпись осуществляется аппаратным ключом (хранящим этот приватный ключ), а проверку подписи должно быть возможно осуществить в любом .NET приложении, включая Silverlight имея доступ только к публичному ключу.

Загружать сторонний (неверифицированный нами) код в свое приложение по вполне понятным причинам мы не хотим.

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

Re: Нужен код проверки подписи ЕСС160 на C#

anatolyvolodko пишет:

Прошу или предоставить корректный код на C# для проверки подписи ECC160 или пояснить, как преобразовать экспортируемый публичный ключ ЕСС160 в формат, подходящий для создания экземпляра ECKeyPair библиотеки "opencrypto.net".

Ваш запрос понятен и принят. Готового решения, к сожалению, у нас нет. Задача помещена в бэклог проекта, при первой возможности наши специалисты этим займутся - к сожалению в ближайший месяц-два занятость по проекту Guardant Mobile не позволит нам это сделать.

Мы напишем в этой теме, когда у нас будет решение.