Spring saml: почему в ответе saml информация ключа может быть зашифрована? - PullRequest
0 голосов
/ 03 июля 2018

Насколько я понимаю, если idp хочет зашифровать утверждения ответа saml. Idp зашифрует его, используя открытый ключ шифрования, предоставленный SP, а SP будет использовать закрытый ключ для его расшифровки.

Но это часть ответа SAML, который я получаю от idp

<EncryptedAssertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
   <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element">
      <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
         <e:EncryptedKey xmlns:e="http://www.w3.org/2001/04/xmlenc#">
            <e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p">
               <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            </e:EncryptionMethod>
            <KeyInfo>
               <ds:X509Data xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
                  <ds:X509IssuerSerial>
                     <ds:X509IssuerName>...</ds:X509IssuerName>
                     <ds:X509SerialNumber>1142467415</ds:X509SerialNumber>
                  </ds:X509IssuerSerial>
               </ds:X509Data>
            </KeyInfo>
            <e:CipherData>
               <e:CipherValue>...</e:CipherValue>
            </e:CipherData>
         </e:EncryptedKey>
      </KeyInfo>
      <xenc:CipherData>...</xenc:CipherData>
   </xenc:EncryptedData>
</EncryptedAssertion>

После прохождения исходного кода открытый ключ шифрования SP вместо того, чтобы использовать для расшифровки / подтверждения, используется для расшифровки / другого ключа, и этот ключ используется для расшифровки / подтверждения (таким образом, вместо двух пар ключей используется вместо только 1).

Я смотрю на исходный код org.opensaml.xml.encryption.Decrypter.

Если определитель поля установлен, будет использоваться decryptUsingResolvedKey (). Это то, что я думаю, всегда следует использовать.

Если установлено поле encKeyResolver, будет использоваться decryptUsingResolvedEncryptedKey ().

Меня смущают две вещи:

  1. в расширении saml весной, когда populateDecrypter (), для resolver устанавливается значение NULL. Почему это?

  2. Какова цель дешифрования с помощью Resolved Encrypted Key? Зачем использовать 2 пары ключей вместо использования 1?

1 Ответ

0 голосов
/ 03 июля 2018

Думаю, я знаю почему, причина в том, что задействованы 2 клавиши, чтобы увеличить скорость.

открытый / закрытый ключ (RSA и т. Д.) Используется для расшифровки / шифрования ключа AES, а ключ AES - для шифрования / дешифрования фактического сообщения.

Поскольку AES намного быстрее, чем RSA, а AES намного короче, чем фактическое сообщение. Это будет быстрее, чем просто использовать ключ RSA для расшифровки / дешифрования фактического сообщения.

Безопасность по-прежнему защищена, так как вам нужен ключ AES для чтения сообщения, и вам нужен ключ RSA для чтения ключа AES.

...