Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kapguokog  
#1 Оставлено : 4 августа 2017 г. 8:47:01(UTC)
kapguokog

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.06.2017(UTC)
Сообщений: 6
Российская Федерация

Принимаю ответ от сервера в виде XML:

Код:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Body>
      <xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
         <xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147"/>
         <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <xenc:EncryptedKey>
               <xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001"/>
               <ds:KeyInfo>
                  <ds:X509Data>
                     <ds:X509Certificate>...</ds:X509Certificate>
                  </ds:X509Data>
               </ds:KeyInfo>
               <xenc:CipherData>
                  <xenc:CipherValue>...</xenc:CipherValue>
               </xenc:CipherData>
            </xenc:EncryptedKey>
         </ds:KeyInfo>
         <xenc:CipherData>
            <xenc:CipherValue>...</xenc:CipherValue>
         </xenc:CipherData>
      </xenc:EncryptedData>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


В "EncryptedKey" мне приходит ASN.1 вот такого вида:

Код:
Offset|Length|LenByte|
======+======+=======+==========================================================================================
     0|   164|      2|   SEQUENCE : 
     3|    40|      1|      SEQUENCE : 
     5|    32|      1|         OCTET_STRING : 
      |      |       |            6cb4581597c8a1c6d8999d5fca15c4a731f671a6b5f4b1563c4c64d38b844780
    39|     4|      1|         OCTET_STRING : '3e45e24f'
    45|   120|      1|      CONTEXT SPECIFIC (0) : 
    47|     7|      1|         OBJECT_IDENTIFIER : 
      |      |       |            ГОСТ 28147-89, параметры по умолчанию (1.2.643.2.2.31.1)
    56|    99|      1|         CONTEXT SPECIFIC (0) : 
    58|    28|      1|            SEQUENCE : 
    60|     6|      1|               OBJECT_IDENTIFIER : 'ГОСТ Р 34.10-2001 (1.2.643.2.2.19)'
    68|    18|      1|               SEQUENCE : 
    70|     7|      1|                  OBJECT_IDENTIFIER : 
      |      |       |                     ГОСТ Р 34.10-2001, параметры обмена по умолчанию (1.2.643.2.2.
      |      |       |                     36.0)
    79|     7|      1|                  OBJECT_IDENTIFIER : 
      |      |       |                     ГОСТ Р 34.11-94, параметры по умолчанию (1.2.643.2.2.30.1)
    88|    67|      1|            BIT_STRING : 
    91|    64|      1|               OCTET_STRING : 
      |      |       |                  2a8f1fc006cb23d3324f2531dea3d086c73f2893c5e0749902f51e37f6a8d8627
      |      |       |                  98bb69129ade95f9e4fd9b050eacf569885db469e79dba549ff2b50608d01d1
   157|     8|      1|         OCTET_STRING : '679a1c5d27adfa04'


Собираю из этого SIMPLEBLOB для секретного ключа и PUBLICBLOB для открытого.
Далее импортирую ключи на стороне получателя (пользуюсь JwaWinCrypt):

Код:
var DataStream : TBytesStream;
    publicBLOB : TBytesStream;
    simpleBLOB : TBytesStream;
    hProv  : HCRYPTPROV;
    akAlg  : ALG_ID;
    phKey,upKey,agKey : HCRYPTKEY;
begin
...  
  CryptAcquireContext(hProv, 'container', CP_GR3410_2001_PROV_A, PROV_GOST_2001_DH, 0);
  CryptGetUserKey(hProv, AT_KEYEXCHANGE, upKey);
  try
    CryptImportKey(hProv, publicBLOB.Memory, publicBLOB.Size, upKey, 0, agKey);
    akAlg := CALG_PRO_EXPORT; 
    CryptSetKeyParam(agKey, KP_ALGID, @akAlg, 0);
    CryptImportKey(hProv, simpleBLOB.Memory, simpleBLOB.Size, agKey, 0, phKey);
    DataStream := TBytesStream.Create(DecodeBase64('<текст сообщения>'));
    try
      dwData := DataStream.Size;
      DataStream.Position := 0;
      CryptDecrypt(phKey, 0, true, 0, DataStream.Memory, dwData);
      DataStream.Position := 0;
      ShowMessage(inttostr(DataStream.Size));
      mmoMessage.Lines.LoadFromStream(DataStream);
    except
      on E: Exception do ShowMessage('Ошибка расшифровки данных ' + E.Message);
    end;
...
end;


В итоге ошибок ни на одном этапе не получил, все дескрипторы ключей успешно получены, но на выходе текст и близко не похожий на исходный.
Подскажите, где я промахнулся?

Отредактировано пользователем 4 августа 2017 г. 8:58:16(UTC)  | Причина: Не указана

Offline kapguokog  
#2 Оставлено : 4 августа 2017 г. 17:47:32(UTC)
kapguokog

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.06.2017(UTC)
Сообщений: 6
Российская Федерация

Удалось решить установкой KP_MODE = CRYPT_MODE_CBC.
Однако осталась другая проблема примерно через каждые 1КБ текста проскакивают некорректно расшифрованные участки по 8 байт.

Єrb%ж9<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><S:Header><wsse:Security S:actor="http://eln.fss.ru/actor/fss/ca/1027739443236"><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/fss/ca/1027739443236">MIIIKTCCB9igAwIBAgIQAdLelk9cEKAAAAH0A+gAAjAIBgYqhQMCAgMwggHJMVcwVQYDVQQJDE7Q
ntGA0LvQuNC60L7QsiDQv9C10YDQtdGD0LvQvtC6LCDQtC4gMywg0LrQvtGA0L8uINCQLCDQsy4g
0JzQvtGB0LrQstCwLCAxMDcxMzkxGDAWBgUqhQNkARINMTAyNzczOTQ0MzIzNjEaMBgGCCqFAwOB
AwEBEgwwMDc3MzYwNTY2NDcxCzAJBgNVBAYTAlJVMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxGzAZ
BgNVBAgMEjc3INCzLtCc0L7RgdC60LLQsDEdMBsGРvБЉцА‡DQEJARYOaW5mby11Y0Bmc3MucnUx
bDBqBgNVBAoMY9Cm0LXQvdGC0YDQsNC70YzQvdGL0Lkg0LDQv9C/0LDRgNCw0YIg0KTQvtC90LTQ
sCDRgdC+0YbQuNCw0LvRjNC90L7Qs9C+INGB0YLRgNCw0YXQvtCy0LDQvdC40Y8g0KDQpDFNMEsG
A1UECwxE0JPQvtC70L7QstC90L7QuSDQo9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNC5INGG0LXQ
vdGC0YAg0KTQodChINCg0KQxGzAZBgNVBAMMEtCT0KPQpiDQpNCh0KEg0KDQpDAeFw0xNzA2MDYw
NzI3MDBaFw0xODA2MDYwNzI3MDBaMIIBhzELMAkGA1UEBhMCUlUxCzAJBgNVBAgMAjc3MRUwEwYD
VQQHDAzQnNC+0YHQutCy0LAxGDAWBgUqhQNkARINMTExMTExMTExMTExMTEaMBgGCCqFAwOBAwEB
EgwxMTExMTExMTExMTExOTA3BgNVBAkMMDEwNzEzOSwg0J7RgNC70LjQutC+0LIg0L/QtdGA0LXR
g9C70L7Quiwg0LQuIDPQsDFnMGUGA1UECgxe0KTQvtC90LQg0YHQvtGG0LjQsNC70YzQvdC+0LPQ
viDRgdGC0YDQsNGF0L7QstCw0L3QuNGPINCg0L7RgdGB0LjQudGB0LrQvtC5INCk0LXQtNC10YDQ
sNGG0LjQuDF6MHgGA1UEAwxx0KTQvtC90LQg0YHQvtGG0LjQsNC70YzQvdC+0LPQviDRgdGC0YDQ
sNGF0L7QstCw0L3QuNGPINCg0L7RgdGB0LjQudGB0LrQvtC5INCk0LXQtNC10YDQsNGG0LjQuCAo
0KLQldCh0KLQntCS0KvQmSkwYzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIeAQNDAARAe5h+
WnfWYSpvVgtJM6XNYkJRYOwOY1Vn0uivtuQl9utKewWDuBwcY24agiFG8zTTqqeYіЄ ен3c/6w
+eua3IEJADAzRTgwMDAyo4IDyzCCA8cwDgYDVR0PAQH/BAQDAgPoMBMGA1UdJQQMMAoGCCsGAQUF
BwMCMBcGBSqFA2RvBA4MDFZpUE5ldCBDU1AgNDCCAZ4GBSqFA2RwBIIBkzCCAY8Mb9Ch0YDQtdC0
0YHRgtCy0L4g0LrRgNC40L/RgtC+0LPRgNCw0YTQuNGH0LXRgdC60L7QuSDQt9Cw0YnQuNGC0Ysg
0LjQvdGE0L7RgNC80LDRhtC40LggKNCh0JrQl9CYKSAiVmlQTmV0IENTUCA0Igxa0J/RgNC+0LPR
gNCw0LzQvNC90YvQuSDQutC+0LzQv9C70LXQutGBICJWaVBOZXQg0KPQtNC+0YHRgtC+0LLQtdGA
0Y/RjtGJ0LjQuSDRhtC10L3RgtGAIDQiDFzQl9Cw0LrQu9GO0YfQtdC90LjQtSDQviDRgdC+0L7R
gtCy0LXRgtGB0YLQstC40Lgg4oSWIDE0OS8zLzIvMi0yMDUyINC+0YIgMjkuMDEuMjAxNCDQs9C+
0LTQsAxi0KHQtdGA0YLQuNGE0LjQutCw0YIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPIOKEliDQ
odCkLzEyOC0yMzI0INC+0YIgMjUg0LDQv9GA0LXQu9GPIDIwMTQg0LPQvtC00LAwDAYDVR0TAQH/
BAIwADA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vd3d3LmZzcy5ydS91Yy9HVUNfRlNTX1JGXzIw
...
</S:Envelope>Ю§

Изменение значения параметра ключа KP_MIXMODE никак на проблеме не отразилось.
Подскажите, как с этим бороться?

Отредактировано пользователем 8 августа 2017 г. 9:50:10(UTC)  | Причина: Не указана

Offline kapguokog  
#3 Оставлено : 9 августа 2017 г. 15:08:05(UTC)
kapguokog

Статус: Новичок

Группы: Участники
Зарегистрирован: 23.06.2017(UTC)
Сообщений: 6
Российская Федерация

Решение найдено. Тема закрыта.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.