
※注意: ・こちらは技術書典オンラインマーケットで販売中のものと同一の内容です。 https://techbookfest.org/product/hRX58ECcTNDh3jZUTN16yA?productVariantID=eeGHS6AZyymPTVMyvGDgMQ
■ まえがき
ITシステム部門のメンバーとして電子帳簿保存法への対応は悩ましい問題です。昨今の電子帳簿保存法(電帳法)の改正により、紙の原本の保管を行わなくとも電子データとして請求書や領収書類を扱えるようになりました。IT全盛の現代に合わせた法改正ですが、同時に既存システムの認定タイムスタンプへの対応という問題が新たに発生しました。 電子データはコピーすることはもちろん変更も改竄も容易であるために、書類自体の有効性を担保するしくみが必要です。その技術がタイムスタンプと呼ばれるものです。ここで言うタイムスタンプとは、RFC-3161という標準規格にのっとった電子署名の一種を指します。これにより電子データが特定の時刻にすでに存在し、かつ途中でその内容が変更されていないことを証明できるのです。このタイムスタンプがない状態では電子データは電子帳簿保存法の要件を満たす正当な証明書類とは見なされません。 ところで、タイムスタンプや電帳法の法的要件を解説した本は出版されているものの、技術者の視点からタイムスタンプ付与の具体的な実装方法を解説したものは本書を除いて存在しません(2024年11月現在)。Web等を含めて一般公開されているもので日本語の情報はほぼ無いに等しく、これまではStackOverflowでの質問書や英語で書かれた個人ブログ記事を参照するか、あるいはPDFBoxやBouncyCastleといったライブラリに付属する数少ない(しかもわかりにくい)サンプルコードを読み解くしかなかったのです。 これはタイムスタンプというかなりニッチな分野であるために実装に関わっている技術者が非常に少ないこと、そして日本国内の認定タイムスタンプのベンダーがビジネス上の観点から情報を積極的に開示していないことが理由と考えられます。また一般的な企業であればタイムスタンプ処理に対応したSaaSやパッケージシステムを使用しているか、もしくは専用のソフトウェアをベンダーから購入しているので技術的な詳細に立ち入る機会そのものがないという事情もあるでしょう。 本書は電子帳簿保存法対応のタイムスタンプ付与の実装方法について解説した唯一の本です。具体的な実装に関する解説はもちろん、すぐに使えるサンプルコードを掲載しています。さらに筆者が用意したタイムスタンプ管理ツールのGithubリポジトリ情報も掲載しています。本書を読めば電帳法対応、RFC-3161準拠タイムスタンプ機能の実装で困ることはありません。本書の内容がタイムスタンプ処理の実装で困っている開発者の一助となれば幸いです。
■ 本書の想定読者
本書は次のような人を対象としています。 ・開発業務において電子帳簿保存法対応が必要な人 ・自作コードをつくってタイムスタンプを押してみたい人 ・RFC-3161規格に興味のある人 本書ではサンプルコードとしてJavaのコードを掲載していますが、プログラミング入門者・初心者向けの文法解説は取り扱いませんのでご注意ください。
■ 動作検証環境
・言語 ... Java ・JDK ... Amazon Corretto(17/21/22), JetBrains Runtime(17) ・推奨バージョン ... Java 21 ・主なフレームワーク ... SpringBoot 3.3.2 / BootStrap 5.3 ・IDE ... IntelliJ IDEA Ultimate 2024.1.4 ※本書でのJavaバージョンごとの動作検証につきましては、あらゆる環境での動作を保証するものではなくベストエフォートとしてご理解ください。
■ 本書サンプルコードについて
本書で紹介するツールについては次のリポジトリを参照ください。 ・タイムスタンプツール - CLI版 URL: https://github.com/furaibo/RFC3161TimeStampTool} ・タイムスタンプツール - Webサービス版 URL: https://github.com/furaibo/RFC3161TimeStampWeb
■ 関連キーワード
電子帳簿保存法(電帳法), タイムスタンプ, 総務省, RFC-3161, TSA, BouncyCastle, Apache PDFBox, Java