Криптографические цифровые подписи используют алгоритмы с открытым ключом для обеспечения целостности данных.Cryptographic digital signatures use public key algorithms to provide data integrity. Если вы подписываете данные с помощью цифровой подписи, другая сторона может проверить подпись и убедиться в том, что данные поступили от вас и не были изменены после подписывания.When you sign data with a digital signature, someone else can verify the signature, and can prove that the data originated from you and was not altered after you signed it. Подробнее о цифровых подписях см. в разделе Cryptographic Services.For more information about digital signatures, see Cryptographic Services.
В этом разделе описывается создание и проверка цифровых подписей с помощью классов пространства имен System.Security.Cryptography.This topic explains how to generate and verify digital signatures using classes in the System.Security.Cryptography namespace.
-
Создание подписейGenerating Signatures -
Проверка подписейVerifying Signatures
Содержание
Создание подписейGenerating Signatures
Цифровые подписи обычно применяются к хэш-значениям, которые представляют массивы данных большого размера.Digital signatures are usually applied to hash values that represent larger data. В примере ниже демонстрируется применение цифровой подписи к хэш-значению.The following example applies a digital signature to a hash value. Сначала создается экземпляр класса RSACryptoServiceProvider с целью формирования набора, состоящего из открытого и закрытого ключей.First, a new instance of the RSACryptoServiceProvider class is created to generate a public/private key pair. Затем экземпляр RSACryptoServiceProvider передается в новый экземпляр класса RSAPKCS1SignatureFormatter .Next, the RSACryptoServiceProvider is passed to a new instance of the RSAPKCS1SignatureFormatter class. При этом экземпляру RSAPKCS1SignatureFormatterпередается закрытый ключ, который и создает цифровую подпись.This transfers the private key to the RSAPKCS1SignatureFormatter, which actually performs the digital signing. Перед тем как подписать хэш-код, вам необходимо указать используемый хэш-алгоритм.Before you can sign the hash code, you must specify a hash algorithm to use. В этом примере используется алгоритм SHA1.This example uses the SHA1 algorithm. Наконец, вызывается метод CreateSignature для выполнения подписи.Finally, the CreateSignature method is called to perform the signing.
Подписывание XML-файловSigning XML Files
.NET Framework предоставляет пространство имен System.Security.Cryptography.Xml , которое позволяет подписывать XML.The .NET Framework provides the System.Security.Cryptography.Xml namespace, which enables you sign XML. Подписывание XML имеет важное значение в случае, если вы хотите убедиться в том, что XML-файл исходит от конкретного источника.Signing XML is important when you want to verify that the XML originates from a certain source. Например, если вы пользуетесь службой котировки акций, которая использует XML, вы можете проверить источник XML-файла, если он подписан.For example, if you are using a stock quote service that uses XML, you can verify the source of the XML if it is signed.
Классы в этом пространстве имен следуют XML-Signature Syntax and Processing рекомендация из консорциума World Wide Web.The classes in this namespace follow the XML-Signature Syntax and Processing recommendation from the World Wide Web Consortium.
К началуBack to top
Проверка подписейVerifying Signatures
Для проверки того, подписаны ли данные определенной стороной, необходимы следующие сведения:To verify that data was signed by a particular party, you must have the following information:
-
открытый ключ стороны, подписавшей данные;The public key of the party that signed the data. -
цифровая подпись;The digital signature. -
подписанные данные;The data that was signed. -
хэш-алгоритм, который использовался при создании подписи.The hash algorithm used by the signer.
Для проверки подписи, созданной с помощью класса RSAPKCS1SignatureFormatter , используется класс RSAPKCS1SignatureDeformatter .To verify a signature signed by the RSAPKCS1SignatureFormatter class, use the RSAPKCS1SignatureDeformatter class. Классу RSAPKCS1SignatureDeformatter необходимо предоставить открытый ключ подписывающей стороны.The RSAPKCS1SignatureDeformatter class must be supplied the public key of the signer. Для указания открытого ключа нужно знать значения модуля и экспоненты.You will need the values of the modulus and the exponent to specify the public key. (Эти значения должны быть предоставлены стороной, создавшей открытый и закрытый ключи.) Сначала создайте RSACryptoServiceProvider объекта, содержащего открытый ключ, который будет проверять подпись, а затем инициализируйте RSAParameters структуры значениями модуля и экспоненты, которые определяют открытый ключ.(The party that generated the public/private key pair should provide these values.) First create an RSACryptoServiceProvider object to hold the public key that will verify the signature, and then initialize an RSAParameters structure to the modulus and exponent values that specify the public key.
В следующем примере кода показано создание структуры RSAParameters .The following code shows the creation of an RSAParameters structure. Свойству Modulus
присваивается байтовый массив ModulusData
, а свойству Exponent
— байтовый массив ExponentData
.The Modulus
property is set to the value of a byte array called ModulusData
and the Exponent
property is set to the value of a byte array called ExponentData
.
После создания объекта RSAParameters можно инициализировать новый экземпляр класса RSACryptoServiceProvider значениями, указанными в RSAParameters.After you have created the RSAParameters object, you can initialize a new instance of the RSACryptoServiceProvider class to the values specified in RSAParameters. Экземпляр RSACryptoServiceProvider , в свою очередь, передается в конструктор класса RSAPKCS1SignatureDeformatter для передачи ключа.The RSACryptoServiceProvider is, in turn, passed to the constructor of an RSAPKCS1SignatureDeformatter to transfer the key.
Этот процесс показан в приведенном ниже примере.The following example illustrates this process. В этом коде HashValue
и SignedHashValue
— байтовые массивы, предоставленные удаленной стороной.In this example, HashValue
and SignedHashValue
are arrays of bytes provided by a remote party. Удаленная сторона подписала объект HashValue
с помощью алгоритма SHA1, создающего цифровую подпись SignedHashValue
.The remote party has signed the HashValue
using the SHA1 algorithm, producing the digital signature SignedHashValue
. КлассуThe
RSAPKCS1SignatureDeformatter.VerifySignature проверяет допустимость цифровой подписи, используемой для подписания объекта HashValue
.RSAPKCS1SignatureDeformatter.VerifySignature method verifies that the digital signature is valid and was used to sign the HashValue
.
Если подпись действительна, этот фрагмент кода выдаст сообщение «The signature is valid
», а в противном случае — сообщение «The signature is not valid
„.This code fragment will display “The signature is valid
» if the signature is valid and «The signature is not valid
» if it is not.
См. такжеSee also
Источник