Предостережение: использование такого типа кэширования «PIN» - это действительно плохая практика безопасности. Любые учетные данные должны храниться в памяти как можно более кратко, чтобы злоумышленники не могли получить информацию о ПИН-коде, отслеживая память системы. Хотя в общем случае это потребует локального доступа к компьютеру, это все еще считается очень актуальной угрозой, потому что в большинстве случаев вы не хотите, чтобы системные администраторы могли отслеживать PIN-коды:)
Тем не менее, это настоящая PITA для пользователей, которым приходится вводить PIN-код каждую секунду. Как и во многих других аспектах безопасности, между безопасностью и удобством использования существует компромисс.
Как вы заметили, многие драйверы смарт-карт сами выполняют эту форму кэширования. Часто на карте есть два сертификата / ключа, один с использованием ключа безотказности, который считается для операций с высокой степенью безопасности, таких как предоставление подписи на документе, другой считается «сертификатом аутентификации», который используется для постоянно повторяющихся операций, таких как как аутентификация с помощью сервиса. Как правило, вам необходимо вводить ПИН-код каждый раз, когда вы получаете доступ к ключу безотказности, в то время как драйвер часто кэширует ПИН-код для ключа аутентификации.
Так что это действительно зависит от вашего конкретного случая использования - если вы считаете, что операция очень критична, я бы посоветовал не делать никакого кэширования вообще. Попробуйте вместо этого «обучить» пользователей. Это для их же блага и т. Д. И т. Д.:)
В противном случае, если вы считаете, что риск является приемлемым, вы можете использовать любую форму межпроцессного взаимодействия, которая подходит вам лучше всего, для совместного использования ПИН-кода между процессами. Простым решением может быть создание «PIN-файла» в каталоге, для которого только приложение имеет права на чтение / запись. Проверяйте наличие файла всякий раз, когда требуется ПИН-код (будьте осторожны с условиями гонки!) - если файла еще нет, попросите ПИН-код и запишите его в файл - в противном случае просто прочитайте ПИН-код из файла. Не забудьте перезаписать память нулями, которые использовались для передачи PIN-кода.