Створення ключів для шифрування і розшифровки

Створення ключів та управління ними - важлива частина криптографічного процесу. Використання симетричних алгоритмів вимагає створення ключа і вектора ініціалізації (IV), які повинні зберігатися в секреті від усіх осіб, які не мають права на розшифровку даних. Для використання асиметричних алгоритмів потрібне створення відкритого і закритого ключів. Відкритий ключ може бути надано будь-кому, в той час як закритий ключ відомий тільки особі, яка має розшифрувати дані, зашифровані за допомогою відкритого ключа. У розділі описується створення ключів і управління ними в разі використання як симетричного, так і асиметричного алгоритмів шифрування.

Класи симетричного шифрування, що надаються .NET Framework, для шифрування і розшифровки даних вимагають ключ і новий вектор ініціалізації (IV). При створенні за допомогою стандартного конструктора нового екземпляра одного з керованих класів симетричного шифрування, автоматично створюються нові ключ і вектор ініціалізації. Будь-яка особа, якій потрібно дозволити розшифрувати дані, повинно мати такі ж ключ і вектор ініціалізації, а також використовувати той же самий алгоритм шифрування. Зазвичай нові ключ і вектор ініціалізації слід створювати заново для кожного чергового сеансу зв'язку, і їх не слід зберігати для використання в наступному сеансі.

Для передачі симетричного ключа і вектора ініціалізації віддаленої стороні вони зазвичай шифруються за допомогою асиметричного шифрування. Пересилання ключа і вектора ініціалізації через незахищену мережу без їх шифрування є небезпечною, так як будь-яка особа, перехопив їх, зможе розшифровувати дані. Додаткові відомості про шифрування і пересилання ключа і вектора ініціалізації см. В розділі Створення криптографічного схеми.

У наступному прикладі демонструється створення нового екземпляра класу TripleDESCryptoServiceProvider. реалізує алгоритм TripleDES.

В процесі виконання цього коду ключ і вектор ініціалізації створюються при створенні нового екземпляра TripleDESCryptoServiceProvider. Інші ключ і вектор ініціалізації створюються при виклику методів GenerateKey і GenerateIV.

Для здійснення асиметричного шифрування в .NET Framework надаються класи RSACryptoServiceProvider і DSACryptoServiceProvider. Ці класи створюють набір з відкритого і закритого ключів при використанні стандартного конструктора для створення нового екземпляра класу. Асиметричні ключі можуть або зберігатися для використання в декількох сеансах, або створюватися окремо для кожного сеансу. У той час як відкритий ключ можна зробити загальнодоступним, закритий ключ повинен бути надійно захищений.

Генерація набору, що складається з відкритого і закритого ключів, здійснюється при створенні нового екземпляра класу асиметричного алгоритму. Після створення нового екземпляра класу можна витягти інформацію про ключі одним з двох способів.

Метод ToXMLString повертає інформацію про ключі в форматі XML.

Метод ExportParameters. який повертає структуру RSAParameters. що містить ключові відомості.

Обидва методи приймають в якості параметра логічне значення, яке показує, чи слід повертати відомості тільки про відкритий ключ або ж і про відкрите, та про закрите ключах. Клас RSACryptoServiceProvider може бути инициализирован значенням структури RSAParameters за допомогою методу ImportParameters.

Асиметричні закриті ключі ніколи не повинні зберігатися в роздрукованому вигляді або у вигляді простого тексту на локальному комп'ютері. Якщо необхідно зберігати закритий ключ, слід використовувати для цього контейнер ключа. Додаткові відомості про зберігання закритого ключа в контейнері ключа см. В розділі Практичний посібник. Зберігання асиметричних ключів в контейнері ключів.

У наступному прикладі створюється новий екземпляр класу RSACryptoServiceProvider. створює відкритий і закритий ключі, і відомості про відкритий ключ записуються в структуру RSAParameters.

Схожі статті