SAML暗号化(Encrypted Assertion)
Encrypted Assertionのポイントを実装者向けに整理します。鍵管理や証明書期限にも注意しましょう。
🔐 Encrypted Assertion(暗号化アサーション)
SAMLでは、Assertion全体を暗号化して送信することで、ネットワーク上での属性情報漏洩を防ぐことができます。
暗号化のメリット
- ✅ IdP→SP間の通信経路で属性情報の秘匿性を保てる
- ✅ 外部からのリプレイ攻撃や盗聴対策になる
- ✅ 企業間連携などでプライバシー保護が求められる場合に有効
復号に必要な情報
- 🔑 SP側の秘密鍵(private key)
- 🔑 IdPがSPの公開鍵を使って暗号化を行う必要がある
- 🔑 SPライブラリがEncryptedAssertionに対応しているか確認
暗号化レスポンスの例
Assertion部分を暗号化したシンプルな例(署名省略・短縮表記)。XMLが途中で傍受されても、Assertionが暗号化されているため機密情報は保護される。
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="_res123" Version="2.0"
Destination="https://sp.example.com/acs" InResponseTo="_req123">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://idp.example.com/metadata</saml:Issuer>
<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
...暗号化されたAssertion本体...
</xenc:EncryptedData>
</saml:EncryptedAssertion>
</samlp:Response>
暗号化を許可するメタデータ例
SPメタデータに暗号化用KeyDescriptorを載せることで、IdPがこの鍵でAssertionを暗号化できます。
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://sp.example.com/metadata">
<md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data><ds:X509Certificate>MIIC...(SP公開鍵)...</ds:X509Certificate></ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
...
</md:SPSSODescriptor>
</md:EntityDescriptor>