Статус: Участник
  Группы: Участники
 Зарегистрирован: 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