(2018-08-09 09:44:39 отредактировано enzain)

Использование аппаратного ДСЧ из С#

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

Может быть кто-то реализовывал уже использование ДСЧ аппаратного на борту Рутокен ЭЦП (1,2) из кода на c#?
Ну или хотя бы, может быть кто-то подскажет в какую сторону копать ...

В принципе сейчас в тестовом режиме генерирую гамму для КриптоПро просто рандомом, он ее понимает, и работает с ней, но это не есть гуд, и хотелось бы действительно аппаратный ДСЧ использовать, а то в КриптоПРО нет поддержки ДСЧ Рутокен (ом же VipNet, например, она есть)

Re: Использование аппаратного ДСЧ из С#

Добрый день, enzain.

Не надо никуда копать. Все просто. Скачиваете наши примеры - https://github.com/AktivCo/RutokenPkcs11Interop.Samples.
Возьмите простой пример, например Standard.CreateGOST34.10-2012, посмотрите как там открывается сессия.
После того как откроете сессию на конкретном устройстве зовите session.GenerateRandom.

Re: Использование аппаратного ДСЧ из С#

спасибо, добрый человек :)

Re: Использование аппаратного ДСЧ из С#

А чего там нет багрепорта?
В самплес.коммон
В хелперах
Правильно будет так:

Стройка 13:            List<Slot> slots = pkcs11.GetSlotList(Net.Pkcs11Interop.Common.SlotsType.WithTokenPresent);

Так как в гите - ругается матом пока не поправишь

(2018-08-10 20:40:46 отредактировано enzain)

Re: Использование аппаратного ДСЧ из С#

В итоге пришел к такому виду:

            using (Pkcs11 pkcs11 = new Pkcs11(@"C:\Windows\System32\rtPKCS11ECP.dll", AppType.SingleThreaded))
            {
                Console.WriteLine("Checking tokens available");
                Slot slot = Helpers.GetUsableSlot(pkcs11);

                Console.WriteLine("Checking mechanisms available");
                List<CKM> mechanisms = slot.GetMechanismList();

                using (Session session = slot.OpenSession(SessionType.ReadWrite))
                {
                    session.Login(CKU.CKU_USER, "12345678");

                    byte[] rnd = new byte[32];
                    rnd = session.GenerateRandom(32);

                    foreach (byte item in rnd)
                    {
                        Console.Write(" {0}", item);
                    }
                    session.Logout();
                }

            }

И так понимаю - логин можно убрать оттуда, но активности токена в момент генерации чисел не наблюдаю блин ... это настараживает

UPD: не, вроде бы всё ок, 2кк порций случайных чисел - показывают активность, всем спасибо :)

Re: Использование аппаратного ДСЧ из С#

Добрый день, enzain.

Рады, что Вам удалось самостоятельно разобраться и что все получилось. Если будут еще вопросы - обращайтесь.