Статус: Новичок
  Группы: Участники
 Зарегистрирован: 08.06.2017(UTC) Сообщений: 1  Откуда: Moscow  
	 
	
     | 
    
        
            
		      
                Добрый вечер, 
  Вычисляю отпечаток файла по алгоритму вычисления хэша по ГОСТу 34.11, а затем подписываю по PKCS#7. По требованиям по работе с файловым хранилищем вставляю соответствующие значения в свой запрос и отправляю в СМЭВ. В ответе приходит: Проверка подписи на вложении: Дайджест не прошел проверку!  Использую using CryptoPro.Sharpei;
  Прошу подсказать, в чем может быть ошибка, или где о ней почитать/куда обратиться? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 28.11.2016(UTC) Сообщений: 1 Откуда: Пермь
  
	 
	
     | 
    
        
            
		      
                Столкнулся с такой же проблемой. Вы нашли ее решение? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 31.03.2017(UTC) Сообщений: 9
  Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Аналогичная проблема. Ответ из технической поддержки СМЭВ: Цитата:"Ошибка "Дайджест не прошел проверку" возникает из за неверно вычесленного хэш-кода. Для проверки просьба использовать  https://www.gosuslugi.ru/pgu/eds.Просьба воспользоваться : — электронного документа. ЭП — отсоединенная, в формате PKCS#7 Так же алгоритм формирование подписи PKCS7 указан в Методические рекомендации по работе с Единой системой межведомственного электронного взаимодействия    4.3.1 Подписи в формате PKCS#7 Просим вас ознакомиться."  Вычисление хэш-кода (C#): Цитата:var gost = new Gost3411CryptoServiceProvider(); return gost.ComputeHash(fileStream);  Подпись хэш-кода: Цитата:             var payloadInfo = new ContentInfo(hash);    var signedCms = new SignedCms(payloadInfo, true); var signer = new CmsSigner(certificate); signedCms.ComputeSignature(signer); return signedCms.Encode();
   В чём может быть проблема? Отредактировано пользователем 15 февраля 2018 г. 8:55:37(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Автор: administrator  Аналогичная проблема. Ответ из технической поддержки СМЭВ: Цитата:"Ошибка "Дайджест не прошел проверку" возникает из за неверно вычесленного хэш-кода. Для проверки просьба использовать  https://www.gosuslugi.ru/pgu/eds.Просьба воспользоваться : — электронного документа. ЭП — отсоединенная, в формате PKCS#7 Так же алгоритм формирование подписи PKCS7 указан в Методические рекомендации по работе с Единой системой межведомственного электронного взаимодействия    4.3.1 Подписи в формате PKCS#7 Просим вас ознакомиться."  Вычисление хэш-кода (C#): Цитата:var gost = new Gost3411CryptoServiceProvider(); return gost.ComputeHash(fileStream);  Подпись хэш-кода: Цитата:             var payloadInfo = new ContentInfo(hash);    var signedCms = new SignedCms(payloadInfo, true); var signer = new CmsSigner(certificate); signedCms.ComputeSignature(signer); return signedCms.Encode();
   В чём может быть проблема?  Здравствуйте.  Внутри ComputeSignature вычисляется и подписывается хеш.      | 
 | 
            
	 
        
    
    
        
              2 пользователей поблагодарили Андрей * за этот пост.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                В ContentInfo необходимо передавать данные (fileStream)    | 
 | 
            
	 
        
    
    
        
              2 пользователей поблагодарили Андрей * за этот пост.  
     | 
    
        
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 16.03.2018(UTC) Сообщений: 8  Откуда: Краснодар  
	 
	
     | 
    
        
            
		      
                Добрый день! Проблема таже! По поводу "В ContentInfo необходимо передавать данные (fileStream)" реализована только byte[], возможно что-то напутано, поясните, пожалуйста. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Здравствуйте.
  Поясните, в чем проблема.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 16.03.2018(UTC) Сообщений: 8  Откуда: Краснодар  
	 
	
     | 
    
        
            
		      
                Для создания хеш использую: 		byte[] byteArray = Encoding.UTF8.GetBytes(fileNameForHash);                 MemoryStream fileStream = new MemoryStream(byteArray);
                  hashValue = hashGost_3411.ComputeHash(fileStream);
                  fileStream.Close();
                  for (int i = 0; i < hashValue.Length; i++)                     _resultHashAsString += string.Format("{0:X2}", hashValue[i]);
  где fileNameForHash - файл (в данном случае поток данных в виде строки, но через файл также пробовал) подлежащий хешированию, hashGost_3411 - Gost3411CryptoServiceProvider hashGost_3411 = new Gost3411CryptoServiceProvider();
  Для подписания хеш использую и получения подписи: 	    signedData = signGost_3410.SignHash(hashValue);
              for (int i = 0; i < signedData.Length; i++)                 _resultSignAsString += string.Format("{0:X2}", signedData[i]);
  где signGost_3410 - new Gost3410CryptoServiceProvider(cspParameters); cspParameters = new CspParameters75, null, keyContainerInfo.KeyContainerName); где: 	privateKey = certificate.PrivateKey; 	ICspAsymmetricAlgorithm iasym = privateKey as ICspAsymmetricAlgorithm;         keyContainerInfo = iasym.CspKeyContainerInfo;
  	так же: 	    X509Store store = new X509Store(storeName, StoreLocation.CurrentUser);             store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
              X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
              X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);
              if (found.Count == 0)             {                 throw new Exception("Сертификат по серийному номеру не найден.");             }             if (found.Count > 1)             {                 throw new Exception("Слишком много сертификатов по серийному номеру.");             }
              certificate = found[0];
  так же пробовал, что у у коллег: 	   var payloadInfo = new ContentInfo(byteArray);//hashValue             var signedCms = new SignedCms(payloadInfo, true);             var signer = new CmsSigner(certificate);             signedCms.ComputeSignature(signer);             signedData = signedCms.Encode();             for (int i = 0; i < signedData.Length; i++)                 _resultSignAsString += string.Format("{0:X2}", signedData[i]);
  SendRequestReuqerst - проходит, ЭП-ОП валидируется (подпись таже, что и для вложений), но далее GetResponce (при ассинхронной проверка) падает - Подпись на вложении не верна, для чего использую выше приведенный код. Мозг вскипел, если, что нет подскажите, буду признателен.
  	
  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Новичок
  Группы: Участники
 Зарегистрирован: 16.03.2018(UTC) Сообщений: 8  Откуда: Краснодар  
	 
	
     | 
    
        
            
		      
                X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false); - здесь по факту 3-ий параметр true. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,987   Сказал «Спасибо»: 605 раз Поблагодарили: 2351 раз в 1847 постах
  
	 
	
     | 
    
        
            
		      
                Код:
byte[] byteArray = Encoding.UTF8.GetBytes(fileNameForHash);
 
 Поясните, что получается в byteArray?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close