Есть такой вопрос по CryptoAPI. Надо поместить в контейнер симметричный ключ и оставить его там в идеале навсегда. Позволяет ли какой нибудь CSP от мелкософта проделывать такое. По MSDN, он считает такие ключи сеансовыми и убивает при CryptDestroyKey.
Re: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Arkadiyl, Вы писали:
A>Есть такой вопрос по CryptoAPI. Надо поместить в контейнер симметричный ключ и оставить его там в идеале навсегда. Позволяет ли какой нибудь CSP от мелкософта проделывать такое. По MSDN, он считает такие ключи сеансовыми и убивает при CryptDestroyKey.
Я таких провайдеров не знаю.
А зачем тебе хранить симметричный ключ?
В крайнем случае можно хранить в CSP ключевую пару RSA, на которой шифровать ключ, а сам ключ в зашифрованном виде просто хранить в реестре.
Re[2]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Arkadiyl, Вы писали:
A>>Есть такой вопрос по CryptoAPI. Надо поместить в контейнер симметричный ключ и оставить его там в идеале навсегда. Позволяет ли какой нибудь CSP от мелкософта проделывать такое. По MSDN, он считает такие ключи сеансовыми и убивает при CryptDestroyKey.
L>Я таких провайдеров не знаю. :) L>А зачем тебе хранить симметричный ключ?
L>В крайнем случае можно хранить в CSP ключевую пару RSA, на которой шифровать ключ, а сам ключ в зашифрованном виде просто хранить в реестре.
Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
Re[3]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Arkadiyl, Вы писали:
A>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
Re[4]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Arkadiyl, Вы писали:
A>>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
L>А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
Вдарим вопросом на вопрос. А за чем тогда вообще CSP? Была бы DLL, создающая ключи и выполняющая шифрование. Аля PGP. А хочется сделать изящно, смоделировать iKey например, где ключ недоступен.
Re[5]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Arkadiyl, Вы писали:
A>Здравствуйте Lexey, Вы писали:
L>>Здравствуйте Arkadiyl, Вы писали:
A>>>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
L>>А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
A>Вдарим вопросом на вопрос. А за чем тогда вообще CSP? Была бы DLL, создающая ключи и выполняющая шифрование. Аля
CSP — это только реализации определенных алгоритмов, не более. То, что они еще и контейнеры предоставляют, так это счастье. В других местах и такое не найдешь. Впрочем, я считаю, что сделали в MS все правильно. Хранит сеансовые ключи в контейнере просто глупо. Во-первых, они на то и сеансовые, чтобы их использовать один раз и выбросить. Во-вторых, как их вообще хранить в контейнере? Ну, private/public пара одна, а сеансовых ключей может быть дофига. Так что для каждого ключа заводить отдельный контейнер?
>PGP. А хочется сделать изящно, смоделировать iKey например, где ключ недоступен.
Так он и так не будет доступен. Или доступность куска непонятного мусора ты считаешь доступностью ключа?
Re[6]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Arkadiyl, Вы писали:
A>>Здравствуйте Lexey, Вы писали:
L>>>Здравствуйте Arkadiyl, Вы писали:
A>>>>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
L>>>А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
A>>Вдарим вопросом на вопрос. А за чем тогда вообще CSP? Была бы DLL, создающая ключи и выполняющая шифрование. Аля
L>CSP — это только реализации определенных алгоритмов, не более. То, что они еще и контейнеры предоставляют, так это счастье. В других местах и такое не найдешь. Впрочем, я считаю, что сделали в MS все правильно. Хранит сеансовые ключи в контейнере просто глупо. Во-первых, они на то и сеансовые, чтобы их использовать один раз и выбросить. Во-вторых, как их вообще хранить в контейнере? Ну, private/public пара одна, а сеансовых ключей может быть дофига. Так что для каждого ключа заводить отдельный контейнер?
>>PGP. А хочется сделать изящно, смоделировать iKey например, где ключ недоступен.
L>Так он и так не будет доступен. Или доступность куска непонятного мусора ты считаешь доступностью ключа?
Я не о стойкости алгоритмов шифрования. Назначение симметричных ключей (кто сказал что они обязаны быть исключительно сеансовыми) может быть любым. Классический пример: ключ шифрования файла, помещаемый в сам файл и шифруемый RSA ключом пользователя. А служба "Защищенное хранилище" участвующая в обслуживании системы шифрования (CSP — просто коротко и понятно) ??? Кстати вопрос, а нет ли у Вас наводочки на доки к ней?
Re[7]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Arkadiyl, Вы писали:
A>>>>>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
L>>>>А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
A>>>Вдарим вопросом на вопрос. А за чем тогда вообще CSP? Была бы DLL, создающая ключи и выполняющая шифрование. Аля
L>>CSP — это только реализации определенных алгоритмов, не более. То, что они еще и контейнеры предоставляют, так это счастье. В других местах и такое не найдешь. Впрочем, я считаю, что сделали в MS все правильно. Хранит сеансовые ключи в контейнере просто глупо. Во-первых, они на то и сеансовые, чтобы их использовать один раз и выбросить. Во-вторых, как их вообще хранить в контейнере? Ну, private/public пара одна, а сеансовых ключей может быть дофига. Так что для каждого ключа заводить отдельный контейнер?
>>>PGP. А хочется сделать изящно, смоделировать iKey например, где ключ недоступен.
L>>Так он и так не будет доступен. Или доступность куска непонятного мусора ты считаешь доступностью ключа?
A>Я не о стойкости алгоритмов шифрования. Назначение симметричных ключей (кто сказал что они обязаны быть исключительно сеансовыми) может быть любым. Классический пример: ключ шифрования файла, помещаемый в сам файл и шифруемый RSA ключом пользователя.
Это и есть почти классический сеансовый ключ. Тут сеансом является пересылка файла и ключа вместе с ним (ключевой обмен и передача данных в одном флаконе).
> А служба "Защищенное хранилище" участвующая в обслуживании системы шифрования (CSP — просто коротко и понятно) ???
Что-то я не понял приписку в скобках: CSP=Cryptographic Service Provider, так причем тут "Защищенное хранилище"?
>Кстати вопрос, а нет ли у Вас наводочки на доки к ней?
Смотри DPAPI или Windows Data Protection в MSDN.
Re[8]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Arkadiyl, Вы писали:
A>>>>>>Вариант с шифрованием симметричного ключа парой из CSP действительно позволяет хранить ключ где угодно. Вопрос мой связан с желанием переложить контроль доступа к этому ключу на CSP а не заниматься маскировыанием файла или ветви реестра.
L>>>>>А зачем его маскировать? Все равно проку от зашифрованного ключа никакого.
A>>>>Вдарим вопросом на вопрос. А за чем тогда вообще CSP? Была бы DLL, создающая ключи и выполняющая шифрование. Аля
L>>>CSP — это только реализации определенных алгоритмов, не более. То, что они еще и контейнеры предоставляют, так это счастье. В других местах и такое не найдешь. Впрочем, я считаю, что сделали в MS все правильно. Хранит сеансовые ключи в контейнере просто глупо. Во-первых, они на то и сеансовые, чтобы их использовать один раз и выбросить. Во-вторых, как их вообще хранить в контейнере? Ну, private/public пара одна, а сеансовых ключей может быть дофига. Так что для каждого ключа заводить отдельный контейнер?
>>>>PGP. А хочется сделать изящно, смоделировать iKey например, где ключ недоступен.
L>>>Так он и так не будет доступен. Или доступность куска непонятного мусора ты считаешь доступностью ключа?
A>>Я не о стойкости алгоритмов шифрования. Назначение симметричных ключей (кто сказал что они обязаны быть исключительно сеансовыми) может быть любым. Классический пример: ключ шифрования файла, помещаемый в сам файл и шифруемый RSA ключом пользователя.
L>Это и есть почти классический сеансовый ключ. :) Тут сеансом является пересылка файла и ключа вместе с ним (ключевой обмен и передача данных в одном флаконе).
>> А служба "Защищенное хранилище" участвующая в обслуживании системы шифрования (CSP — просто коротко и понятно) ???
L>Что-то я не понял приписку в скобках: CSP=Cryptographic Service Provider, так причем тут "Защищенное хранилище"?
>>Кстати вопрос, а нет ли у Вас наводочки на доки к ней?
L>Смотри DPAPI или Windows Data Protection в MSDN.
Спасибо за наводку :) Нашел на их сайте.
Наверно, можно назвать операцию с таким файлом сеансом, если менять ключ после каждой опреации чтения/записи. Иначе — вопрос в трактовке слова "сеанс". Основа сеансового ключа — это процесс смены его по завершению сеанса (или даже одной операции в рамках сеанса). А так, мелкософт применяет session практически везде, где есть симметричный ключ. Я бы всетаки вернулся к главному моменту: где физически хранятся ключи и в каком виде. Какие методы ограничения доступа к ним применяет ОС и что из них можно использовать для этого самого сеансо-симметричного ключа?
:???:
Re[9]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Arkadiyl, Вы писали:
A>Наверно, можно назвать операцию с таким файлом сеансом, если менять ключ после каждой опреации чтения/записи.
Любое количество считываний можно считать одним сеансом с неограниченным временем сущесвования.
Главное чтобы данные были одни и те же.
>Иначе — вопрос в трактовке слова "сеанс". Основа сеансового ключа — это процесс смены его по завершению сеанса (или >даже одной операции в рамках сеанса). А так, мелкософт применяет session практически везде, где есть симметричный
Ну в общем-то так оно и есть. Но сеансовые ключи обычно меняют перед передачей новой порции данных, а здесь данные все время постоянны.
>ключ. Я бы всетаки вернулся к главному моменту: где физически хранятся ключи и в каком виде. Какие методы
Физически они могут хранится где угодно и как угодно — это дело CSP, как он их хранит. Стандартные CSP хранят ключи на диске в зашифрованном виде. Вполне возможно, что при наличии смарт-карты они могут хранить ключи и в ней.
>ограничения доступа к ним применяет ОС и что из них можно использовать для этого самого сеансо-симметричного ключа?
Сомневаюсь, что ОС применяет к ним какие-то особенные методы ограничения доступа. Вероятнее всего только файл хранилища ключей лочится. Соответсвенно, низкоуровневым доступом к диску до ключей скорее всего можно добраться, только толку от этого будет мало, поскольку они все равно зашифрованы. Можешь для себя использовать Protected Storage, но она Win2k+-only, насколько я понял.
Re[10]: Есть ли возможность хранить симметричный ключ в CS
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Arkadiyl, Вы писали:
A>>Наверно, можно назвать операцию с таким файлом сеансом, если менять ключ после каждой опреации чтения/записи.
L>Любое количество считываний можно считать одним сеансом с неограниченным временем сущесвования. L>Главное чтобы данные были одни и те же.
>>Иначе — вопрос в трактовке слова "сеанс". Основа сеансового ключа — это процесс смены его по завершению сеанса (или >даже одной операции в рамках сеанса). А так, мелкософт применяет session практически везде, где есть симметричный
L>Ну в общем-то так оно и есть. Но сеансовые ключи обычно меняют перед передачей новой порции данных, а здесь данные все время постоянны.
>>ключ. Я бы всетаки вернулся к главному моменту: где физически хранятся ключи и в каком виде. Какие методы
L>Физически они могут хранится где угодно и как угодно — это дело CSP, как он их хранит. Стандартные CSP хранят ключи на диске в зашифрованном виде. Вполне возможно, что при наличии смарт-карты они могут хранить ключи и в ней.
>>ограничения доступа к ним применяет ОС и что из них можно использовать для этого самого сеансо-симметричного ключа?
L>Сомневаюсь, что ОС применяет к ним какие-то особенные методы ограничения доступа. Вероятнее всего только файл хранилища ключей лочится. Соответсвенно, низкоуровневым доступом к диску до ключей скорее всего можно добраться, только толку от этого будет мало, поскольку они все равно зашифрованы. Можешь для себя использовать Protected Storage, но она Win2k+-only, насколько я понял.
Спасибо Lexey!
Именно этот момент меня и интересовал. Похоже придется делать по схеме шифрования файла с сохранением в нем своего ключа.