. XMLデジタル署名とは?仕組み・種類・作成方法をわかりやすく解説! | Study SEC
XMLデジタル署名とは?仕組み・種類・作成方法をわかりやすく解説! | Study SEC
XMLデジタル署名とは?仕組み・種類・作成方法をわかりやすく解説! | Study SEC

XMLデジタル署名とは?仕組み・種類・作成方法をわかりやすく解説!

public class KeyPairGeneratorExample public static KeyPair generateKeyPair() throws NoSuchAlgorithmException KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); // 2048ビットの鍵を生成 return keyGen.generateKeyPair(); >

public static void main(String[] args) throws NoSuchAlgorithmException KeyPair keyPair = generateKeyPair(); System.out.println("公開鍵: " + keyPair.getPublic()); System.out.println("秘密鍵: " + keyPair.getPrivate()); >>

6-1-3. XMLデジタル署名の作成

以下のコードは、Javaの XMLSignatureFactory を使用してXMLに署名を付与する例です。

import java.io.File;import java.io.FileOutputStream;import java.security.KeyPair;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SignatureException;import javax.xml.crypto.dsig.*;import javax.xml.crypto.dsig.dom.DOMSignContext;import javax.xml.crypto.dsig.keyinfo.*;import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;

public class XMLDigitalSignatureExample public static void main(String[] args) throws Exception // キーペアの生成 KeyPair keyPair = KeyPairGeneratorExample.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic();

// XML文書の読み込み DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("sample.xml"));

// XMLデジタル署名の作成 XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");

// 署名方式の指定 Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA256, null)); SignedInfo signedInfo = fac.newSignedInfo( fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA256, null), java.util.Collections.singletonList(ref));

// 鍵情報の作成 KeyInfoFactory kif = fac.getKeyInfoFactory(); KeyValue kv = kif.newKeyValue(publicKey); KeyInfo keyInfo = kif.newKeyInfo(java.util.Collections.singletonList(kv));

// 署名の作成 DOMSignContext dsc = new DOMSignContext(privateKey, document.getDocumentElement()); XMLSignature signature = fac.newXMLSignature(signedInfo, keyInfo); signature.sign(dsc);

// 署名付きXMLの出力 FileOutputStream fos = new FileOutputStream("signed_sample.xml"); javax.xml.transform.TransformerFactory.newInstance().newTransformer() .transform(new javax.xml.transform.dom.DOMSource(document), new javax.xml.transform.stream.StreamResult(fos)); fos.close();

6-1-4. 署名の検証

import java.io.File;import java.security.PublicKey;import javax.xml.crypto.dsig.XMLSignature;import javax.xml.crypto.dsig.XMLSignatureFactory;import javax.xml.crypto.dsig.dom.DOMValidateContext;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;

public class XMLSignatureVerification public static void main(String[] args) throws Exception // 公開鍵を取得(署名作成時に生成したものを使用) KeyPair keyPair = KeyPairGeneratorExample.generateKeyPair(); PublicKey publicKey = keyPair.getPublic();

// 署名付きXMLの読み込み DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("signed_sample.xml"));

// 署名の検証 XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); Node signatureNode = document.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature").item(0); DOMValidateContext valContext = new DOMValidateContext(publicKey, signatureNode); XMLSignature signature = fac.unmarshalXMLSignature(valContext);

boolean isValid = signature.validate(valContext); if (isValid) System.out.println("XMLデジタル署名は有効です。"); > else System.out.println("XMLデジタル署名の検証に失敗しました。"); > >>

6-2. まとめ ステップ説明1. キーペアの生成RSAを使用して公開鍵と秘密鍵を作成2. XMLデジタル署名の作成 XMLSignatureFactory を使用して署名を作成3. 署名付きXMLの出力署名を付加したXMLをファイルとして保存4. 署名の検証 XMLSignatureFactory を用いて署名の整合性をチェック IT資格を取りたいけど、何から始めたらいいか分からない方へ
  • 出題傾向に絞ったカリキュラム
  • 講師に質問できて、挫折しない
  • 学びながら就職サポートも受けられる
RELATED POST

IEEE802.1X認証とは?仕組み・設定・導入手順をわかりやすく解説!

2025年3月23日 gajigaji

SMTP認証とは?仕組みや設定方法、トラブル解決法を徹底解説!

2025年3月18日 gajigaji

生体認証とは?指紋だけではない 顔・静脈・虹彩・音声の違いと選び方を徹底解説!

2025年8月24日 gajigaji
  • プロフィール
  • プライバシーポリシー
  • お問い合わせ
  • サイトマップ
  • ネットワークセキュリティを学ぶためにおすすめな動画5選
  • ネットワークセキュリティ初心者の勉強におすすめな本7選!
  • 20代エンジニアが“最短でCCNA合格”を実現する方法とは?
  • 外資系セキュリティメーカーへの転職を成功させるポイント
📎📎📎📎📎📎📎📎📎📎