| 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
 Сообщений: 15
 
 | 
            
		      
                Здраствуйте! Вопрос такой: 1)  Есть исходное сообщение (byte [] DataToSign) 2)  Есть подпись сообщения. (byte [] SignedData) 3)  Есть сертификат пользователя, который подписал это сообщение.  (X509Certificate2 Cert) Как проверить верна ли подпись сердствами .NET разумется? (Verify) ??????????????????????? Сразу оговорюсь, что контейнера связанного с сертификатом НЕТ! Отредактировано пользователем 20 октября 2008 г. 19:11:54(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                SignedData это 64 байта подписи без дополнительных форматов? Тогда проще всего так  Код:Gost3411CryptoServiceProvider GostHash = new Gost3411CryptoServiceProvider();
byte[] rgbHash = GostHash.ComputeHash( DataToSign );
GostSignatureDeformatter deformater = new GostSignatureDeformatter(cert.PublicKey.Key);
deformater.VerifySignature( rgbHash, SignedData );
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
 Сообщений: 15
 
 | 
            
		      
                В строчке : GostSignatureDeformatter deformater = new GostSignatureDeformatter(cert.PublicKey.Key); Вываливается ошибка The certificate key algorithm is not supported. а именно на свойстве Key В чём может быть дело? Крипто-Про CSP КС1 3.0.3300.1 Отредактировано пользователем 21 октября 2008 г. 8:58:46(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Скорее всего не установлен или некорректно установился КриптоПро Шарпей. Установилась ли утилита alarm? (C:\Program Files\Crypto Pro\Sharpei\alarm.exe).  Если утилита установилась, то запустите  В текущем каталоге будет создан файл osinfo.txt Вышлите его пожалуйста на адрес support@cryptopro.ru Если утилита не устаовилась, то сообщите номер версии КриптоПро Шарпей: Start/Settings/Control Pannel/Add Remove Programs/CryptoPro Sharpei/Click Here for support information | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
 Сообщений: 15
 
 | 
            
		      
                Выслал!Как корректно переустановить?
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Машина перезагружалась после установки? | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
 Сообщений: 15
 
 | 
            
		      
                Перезагрузил машину, ошибка The certificate key algorithm is not supported ушла. Теперь не работает проверка подписи, точнее она всегда выдает false bool ver = deformater.VerifySignature( rgbHash, SignedData );
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Скорее всего подпись сформирована с помощью класса Gost3410CryptoServiceProvider и его метода Sign. Формат подписи у провайдера (Gost3410CryptoServiceProvider) и у форматера (GostSignatureFormatter) различный - перевернутый. 1. Можно формировать подпись при помощи класса GostSignatureFormatter  Код:GostSignatureFormatter formatter = new GostSignatureFormatter(Cert.PrivateKey);
byte[] SignedData = formatter.CreateSignature(rgbHash);
 и проверять его при помощи класса GostSignatureDeformatter Код:GostSignatureDeformatter deformater = new GostSignatureDeformatter(Cert.PublicKey.Key);
bool ret = deformater.VerifySignature(rgbHash, SignedData);
 2. Можно формировать подпись при помощи метода Sign класса Gost3410CryptoServiceProvider Код:Gost3410CryptoServiceProvider prov = (Gost3410CryptoServiceProvider)cert.PrivateKey;
byte[] SignedData = prov.SignData(DataToSign, hash);
 переворачивать ее перед проверкой  Код:Array.Reverse(SignedData);
  и проверять при помощи класса GostSignatureDeformatter (см. 1). 3. Можно формировать подпись при помощи метода Sign класса Gost3410CryptoServiceProvider (см. 2), и проверять ее при помощи метода Verify. При этом пользуясь явным приведением от AsymmetricAlgorithm к Gost3410: Код:Gost3410 publicProv = (Gost3410)(cert.PublicKey.Key);
bool ret = publicProv.VerifySignature(rgbHash, SignedData);
 Во всех примерах, предполагалось: что при формировании подписи сертификат находится в store "MY" и связан с соответствующим секретным ключем. При проверке подписи, этого не требуется. | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 20.10.2008(UTC)
 Сообщений: 15
 
 | 
            
		      
                Большое спасибо за разъяснения особенно за этот кусочек:GostSignatureFormatter formatter = new GostSignatureFormatter(Cert.PrivateKey);
 byte[] SignedData = formatter.CreateSignature(rgbHash);
 Все заработало.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close