オープンソースのミドルウェア OpenSC

Similar documents
IC API

サブスクライバー / 署名者 Subscriber 側 ( アリス ) の要件 セキュアな署名 なりすましをいかに防ぐか 署名に使用する私有鍵をいかに保護私有鍵をいかに保護するか?? セキュアなハードウェアトークンなどが有効 セキュアな装置のセキュリティ基準 欧州の電子署名では SSCD (Secu

IC カードによる共有端末認証システムの構築について 名古屋大学情報連携基盤センター葛生和人 第一回東海地区 CSI 報告会 2006 年 9 月 22 日 ( 金 ) 名古屋大学情報連携基盤センター 強固なセキュリティを持ったログオン認証 ID + パスワード IC カード + PKI PIN コ

FIDO技術のさらなる広がり

 

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

製品ラインアップ ハードウェア < 部品としてのご提供 > ーお客様でソフトエアの開発が必要ですー弊社で受託開発も可能です チャレンジ & レスポンス Web 構築に最適ドライバレスタイプ : epass1000nd チャレンジ & レスポンス方式 電子証明書の格納に両方対応可能汎用型タイプ : e

マイナンバーカードによる認証と署名

WebReportCafe

目次 1 はじめに 適用範囲 参照規格 ( 引用規格 ) 用語の定義 伝送プロトコル 初期化及び衝突防止 伝送プロトコル 機能仕様 論理ファイル構造

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

NFCライブラリマニュアル

証明書(Certificates)

プログラミング基礎

, : GUI Web Java 2.1 GUI GUI GUI 2 y = x y = x y = x

スライド 1

P3FY-A JP.PDF

VB実用Ⅲ⑩ フリーデータベースⅡ

Microsoft Word - Writing Windows Installer's DLL.doc

WebReportCafe

資料 5-2 Government 公的個人認証サービスのスマートフォンでの利活用の実現に向けた実証 について iphone に於ける利用者証明書ダウンロードの検証 2016 年 10 月 25 日日本アイ ビー エム株式会社 2016 IBM Corporation

7th CodeGear Developer Camp

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Program Design (プログラム設計)

Microsoft Word - tutorial3-dbreverse.docx

memo

AP-700/AP-4000 eazy setup

WL-RA1Xユーザーズマニュアル

Notesアプリが iPadで動くDomino Mobile Apps ご紹介

LEAP を使用して Cisco ワイヤレス クライアントを認証するための Funk RADIUS の設定

ACR39U-N1 技術仕様書 V1.01

CONTEC DIOプロバイダ ユーザーズガイド

ACR38U-N1 技术规格书 V1.14


HPKI カードドライバセット インストール手順書 Version1.30 (R201405) 三菱電機インフォメーションシステムズ株式会社

reduc forall k: key, x: bitstring; HMAC_SHA1(k, x) = hmac(k, x). reduc forall k: key, r: nonce; f1(k, r) = hmac(k, nonce_to_bitstring(r)). reduc foral

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar



// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

VPN 接続の設定

パスワード暗号化の設定

情報セキュリティ 第 9 回 :2007 年 6 月 15 日 ( 金 )

Symantec AntiVirus の設定

TFTP serverの実装

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

プロバイダ ユーザーズガイド

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

ACR39U-U1 技術仕様書 V1.05

wireshark dissector with lua

Agileイベント・フレームワークとOracle BPELを使用したPLMワークフローの拡張

USB トークン (epass2003) ユーザマニュアル Ver2.0 1 / 25 Copyright 2018 Mitsubishi Electric Information Network Corporation All rights reserved.

<4D F736F F D F81798E518D6C8E9197BF33817A88C38D868B5A8F70834B D31292E646F63>

HARTING Node.js Environment for HAIIC MICA 日本語 HARTING Node.js Environment for HAIIC MICA HARTING IT Software Development Marienwerder Str. 3, E

Microsoft Word - FactoryActivationManagerQuickManualR00

untitled

V35R5インストールマニュアル(ダウンロード)

Introduction Purpose This training course demonstrates the use of the High-performance Embedded Workshop (HEW), a key tool for developing software for

Windows PowerShell 用スクリプト形式編 改版履歴 版数 日付 内容 担当 V /4/1 初版 NII V /2/26 動作環境の変更に伴う修正 NII V /8/21 タイムスタンプ利用手順の追加 NII 目次 1. コード署名用証明

Microsoft Word - Android開発環境構築.doc

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

AMR220-C1 技術仕様書 V1.02

HULFT Series 製品における Javaの脆弱性(CVE )に対する報告

FTDI Driver Error and Recovery Procedure Check FTDI driver operation Rev :OK, Rev :NG, Rev :NG May 11, 2017 CHECK FTDI DRIVER

C02.pdf

1. 実施体制について 本実証事業の実施体制は以下の通りです 総務省情報通信政策課 プロジェクト統括 三菱総合研究所 (MRI) NTT データ Android 検討 検証 ios 検討 検証 NTT コム ( 助言 情報提供等 ) DNP 日本 IBM NTT ドコモ KDDI ソフトバンク 20

KADIAS Mac OS X 用事前環境準備手順書

Microsoft Word - Win-Outlook.docx

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

PASSEXAM

Adaptec RAID Controller Installation and User’s Guide

NSR-500 Create DVD Installer Procedures

CUCM と VCS 間のセキュア SIP トランクの設定例

Microsoft PowerPoint - kougi9.ppt

URoad-TEC101 Syslog Guide

OSSTechプレゼンテーション

AquesTalk プログラミングガイド

USB キーを使用して Windows リモートデ スクトップへのセキュアなログインを実現 Rohos Logon Key 2 要素認証 (2FA) ソフトウェアが ターミナルサーバーを保護し パスワードとハードウェア USB トークンを使用してリモートデスクトップにログインを可能にします Roho

[ 証明書の申請から取得まで ] で受領したサーバ証明書を server.cer という名前で任意の場所に保存してください ( 本マニュアルではローカルディスクの work ディレクトリ [C:\work] に保存しています ) 中間 CA 証明書を準備します 次の URL にアク

Microsoft Word - Android_SQLite講座_画面800×1280

目次 1. HLA Fusion 3.0 がインストール可能な環境 HLA Fusion 3.0 のインストール HLA Fusion 3.4 のインストール 初期設定用データベース接続 ( 初めての方のみ ) 既存データベースのUpg

HULFT の通信をよりセキュアに HULFT と SSH Tectia を組み合わせたセキュアで強力なファイル転送 Compatibility Note 2008 年 9 月 株式会社セゾン情報システムズの企業内 企業間通信ミドルウェアである HULFT は ファイル転送のアプリケーションとして

POSIXスレッド

PowerPoint プレゼンテーション

Microsoft Word - MacOSXインストールマニュアル( ).doc

intra-mart Accel Platform — Slack連携モジュール 利用ガイド   初版  

説明書

プレポスト【問題】

Contents 1. はじめに 3.GUIからのアクセス方法 4 3. 鍵ペアの生成 5 4. サーバ証明書署名要求 (CSR) の作成 9 5. サーバ証明書のインストール 1 6.ServerIronの設定 17

ICカード用ドライバ(ソフト)マニュアル

ACR3201 MobileMate 技術仕様書 V1.00

二次元連続動的計画法による知的画像処理システム ImageFileSelector RTC 機能仕様書 ImageFileSelectorRTC Ver.1.0 ( 株 ) 東日本計算センター 1 / 11

Ver.1 1/17/2003 2

Server Backup Manager 5.0 Debian および Ubuntu システムへの Server Backup Free のインストール 1. APT-GET をしてServer Backup Free をインストールする 2. Server Backup Free のインストール

AquesTalk Win Manual

京都大学認証基盤ドライバソフト 導入手順書 (WindowsVista ~ Windows10 版 ) 京都大学情報環境機構 第 1 版第 2 版第 3 版 2015 年 3 月 27 日 2015 年 6 月 17 日 2015 年 12 月 9 日

appli_HPhi_install

目次. はじめに..... 本書の対象者..... ご利用環境.... 電子証明書更新手順..... 医療資格証電子証明書オンライン更新サービス画面 ご利用パソコン環境の確認 JAVA 実行環境 電子証明書更新の実行 電子証明書更新発行

目次 ハードウェア要件 page 3 バージョンアップ手順 ( 1 )Tebis V3.5 R3 インストール page 4 ~ page 16 ( 2 ) ハードロックドライバのインストール page 17 ~ page 19 ( 3 ) 環境設定 page 20 Tebis 旧バージョンの削除

<4D F736F F D20B6BCB5D7B2CCDED7D8CFC6ADB1D9315F43532E444F43>

Transcription:

オープンソースのミドルウェア OpenSC ROBOC 伊藤大輔

OpenSC History 2001-11 OpenSC 0.2 by Yrjölä and Timo Teräs. 2004-12? Belpic Belgium has choosen OpenSC as software basis for their national ID card and the source code changes to OpenSC have been published under LGPL license. Their modified version is published under the name "Belpic", and both complete source code and binaries are available for download. Thanks to Belgium. 2006-3 LinuxTag

LinuxTAG 2006 http://www.opensc-project.org/history.html#linuxtag2006

サブプロジェクト サブプロジェクト名 概要 開発規模 OpenSC メインプロジェクト Linux,Mac OS X,Windows 上で稼動する 汎用的なカード用ライブラリ PKCS#11ライブラリ ツールなど 9 万ステップ Windows Installer SCB Apple Mac OS X Installer SCA OpenSSL PKCS#11 Engine Windows 用バイナリパッケージと 各種ツールをコンパイルし まと Windows 独自のツールをサポートめたもの する Mac OS X 用バイナリパッケージ各種ツールをコンパイルし まとと Mac ネイティブアプリケーめたもの ションサポート用プログラム OpenSSL 用 PKCS#11 プログラム 1 千ステップ OpenSSLでIC IDカードを利用できる GTK Card IC IDカード操作用のGUIアプリ 8 千ステップ ケーション OpenCT カードリーダ USBトークン用の 3 万ステップ ドライバ Pam PKCS#11 高機能 PAM 認証モジュール 1 万 3 千ステップ Pam P11 単機能 PAM 認証モジュール 1 千ステップ Libp11 PKCS#11ライブラリ 6 千ステップ OpenSC-Java Java1.5 用のIC IDカードサポート 1 万 1 千ステップ

マルチプラットフォーム対応 Linux Apps Windows Apps Mac Apps Mac Native Apps PAM Win CSP Sec API PKCS#11 tokend OpenSC CT-API OpenCT PC/SC Linux Windows Mac OS X IC/ID カード

ミドルウエア 2 章 IC ID カードサービスの相互運用性に関係する標準を説明する クライアントアプリケーション ミドルウェア 4 章ミドルウェアの事例研究としてソースコードが公開されている OpenSC PIV を取り上げる 5 章事例研究として PIV/FIPS201 のテスト仕様 テストツール 認定 認定製品の例 を説明する IC ID カード カードアプリケーション MF データモデル バルーン型の吹き出しです 図形を選択して入力します 必要に応じて大きさを変更します コントロール DF EF ハンドルを移動してポインタを話者に向けます カード OS EF 3 章事例研究として仕様が公開されている FINEID,BELPIC,PIV を取り上げる

Middle or NOT Application Middle Ware Driver X Driver Y 全部 CardY 用に作ったドライバ Module A Module B Module C PC/SC Card A Card B Card C Card X Card Y

全体のアーキテクチャ OpenSC コマンドラインツール類 Opensctool Openscexpoler PKCS15- init Pkcs15 - tool OpenSC PKCS#15 ライブラリ Pkcs11 - tool PKCS#15 処理モジュール クライアントアプリケーション群 PKCS#11 PKCS#11 アプリケーション PKCS#11 アプリケーションアプリケーション PKCS#11 ライブラリ Crypto-API Crypto-API アプリケーションアプリケーション MS CSP PKCS#15 PKCS#15 エミュレーション PKCS#15 エミュレーション ID ID カード別モジュールエミュレーションデータモデル別モジュールカード別モジュール OpenSC 低レベルライブラリ ISO-7816 準拠モジュール OpenCT( PC/SC) Device カードエッジ I/F 別モジュール カード R/W MF DF EF EF データモデルカードOS

ミドルウエア (OpenSC) PKCS#11 API CUI Commands OpenSC API ISO7816 4,8,9 PKCS#15 デフォルト実装 Card Edge High Level High PKCS#15 Level Emu. カードエッジ I/F モジュール PKCS#15 エミュレーションデータモデル別モジュール

カード対応モジュール カードエッジ I/F モジュール カードエッジ I/F の違いを吸収する カードの OS の違い card-xxx.c デフォルト実装は iso7816.c に書かれている PKCS#15 エミュレーションモジュール クレデンシャルフォーマットの違いを吸収する カードに格納されるデータの違い pkcs15-xxx.c デフォルト実装は pkcs15.c に書かれている

OpenSC がサポートするカード OS カード名 カード OS( カードエッジ I/F) Schlumberger/Axalto Cryptoflex Gemplus GPK EMV Siemens CardOS M4 IBM JCOP Micardo Oberthur OpenPGP Setec Setcos Giesecke & Devrient Starcos Giesecke & Devrient Seccos 説明 TCOS based cards (NetKey E4, SignTrust, Smartkey) card-flex.c( カードエッジI/F) card-gpk.c( カードエッジI/F) card-emv.c( カードエッジI/F) card-cardos.c( カードエッジI/F) card-jcop.c( カードエッジI/F) card-mcrd.c( カードエッジI/F) card-oberthur.c( カードエッジI/F) card-openpgp.c( カードエッジI/F) card-setcos.c( カードエッジI/F) card-starcos.c( カードエッジI/F) card-tcos.c( カードエッジI/F)

OpenSC がサポートする USB トークン カード名 USB トークン Aladdin etoken Pro Eutron CryptoIdentity ITSEC Schlumberger/Axalto e-gate Rainbow ikey 3000 説明 card-cardos.c Siemens CardOS M4 card-starcos.c G&D 社のStarcos card-flex.c Schlumberger/Axalto Cyberflex card-starcos.c G&D 社のStarcos

OpenSC がサポートする ID カード カード名 国等が発行している ID カード フィンランド ID Card FINEID スウェーデン Posten eid エストニア ID Card EstEID イタリア Infocamere イタリア Postecert ベルギー BELPIC スペイン Ceres ドイツ ID Cards, ehba, egk 台湾 オーストリア Bürgerkarte, e-card 米国 PIV card applet 説明 PKCS#15 準拠カード カード OS は Setec Setcos PKCS#15 準拠カード スウェーデンの郵便局の eid pkcs15-esteid.c( データモデル ) 100 万枚以上の ID カードを発行 pkcs15-infocamere.c( データモデル ) イタリアの民間認証局のカード pkcs15-postecert.c( データモデル ) イタリア郵政局の事業会社である Postecom 社が発行 PKCS#15 準拠カード 2006 年 10 月現在 400 万枚以上のカードを発行 ミドルウェアに OpenSC を全面的に採用 PKCS#15 準拠カード スペインの電子 ID カード pkcs15-tcos.c( データモデル ) ドイツポストの認証局 (SignTrust) が発行するカード ドイツテレコムの認証局 (Telesec) が発行するカード PKCS#15 準拠カード 台湾市民 IC カード pkcs15-atrust-acos.c( データモデル ) オーストリアの市民カード pkcs15-postecert.c( データモデル ) card-piv.c( カードエッジ I/F)

レイヤ IC ID カード 証明書の内容等 5 クライアントアプリケーション署名アプリ PKCS#11 データモデル MF DF バルーン型の吹き出しです 図形を選択して入力します 必要に応じて大きさを変更します コントロールハンドルを移動してポインタを話者に向けます カードOS 7816-4,8,9 EF EF 3 4 データモデル カードエッジ I/F データモデルの対応 (ISO/IEC 7816-15) カードエッジ I/F 対応 接触 PC/SCなど 1 カードR/W 非接触 TypeA B etc. 2 Device( USBなど ) 署名要求

カードエッジインタフェース (1) ISO/IEC7816-4 コマンドフォーマット CLA INS P1 P2 Lc コマンドデータ Le 応答フォーマット 応答データ SW1 SW2 コマンド CLA クラスバイト 各ビットに意味を持つ 最上位ビットがセットされている場合 7816 標準のコマンドではないことを示す INS 処理を行うコマンドを示す 応答 P1 P2 Lc コマンドデータ Le 応答データ SW1 SW2 コマンドに付随するパラメータを示す 後に続くコマンドデータの長さを示す 応答データで予想される最大のデータ長 コマンド実行結果のステータス ( 成功 エラー ) を示す

カードエッジインタフェース (2) ISO/IEC7816-4,8 SELECT MANAGE CHANNEL READ BINARY WRITE BINARY UPDATE BINARY SEARCH BINARY ERASE BINARY READ RECORD WRITE RECORD UPDATE RECORD APPEND RECORD SEARCH RECORD ERASE RECORD GET DATA PUT DATA INTERNAL AUTHENTICATE GET CHALLENGE EXTERNAL AUTHENTICATE GENERAL AUTHENTICATE VERIFY CHANGE REFERENCE DATA ENABLE VERIFICATION REQUIREMENT DISABLE VERIFICATION REQUIREMENT RESET RETRY COUNTER GET RESPONSE ENVELOPE MANAGE SECURITY ENVIRONMENT SET STORE RESTORE ERASE PERFORM SECURITY OPERATION COMPUTE CRYPTOGRAPHIC CHECKSUM COMPUTE DIGITAL SIGNATURE HASH VERIFY CRYPTOGRAPHIC CHECKSUM VERIFY DIGITAL SIGNATURE VERIFY CERTIFICATE ENCIPHER DECIPHER GENERATE ASYMMETRIC KEY PAIR 実装あり 実装ないが 他のコードから使用 構造体の定義のみアリ

カードエッジ I/F モジュール static struct sc_card_operations iso_ops = { no_match, NULL, /* init */ NULL, /* finish */ iso7816_read_binary, iso7816_write_binary, iso7816_update_binary, NULL, /* erase_binary */ iso7816_read_record, iso7816_write_record, iso7816_append_record, iso7816_update_record, iso7816_select_file, iso7816_get_response, iso7816_get_challenge, NULL, /* verify */ iso7816_logout, iso7816_restore_security_env, iso7816_set_security_env, iso7816_decipher, iso7816_compute_signature, NULL, /* change_reference_data */ NULL, /* reset_retry_counter */ iso7816_create_file, iso7816_delete_file, NULL, /* list_files */ iso7816_check_sw, NULL, /* card_ctl */ iso7816_process_fci, iso7816_construct_fci, iso7816_pin_cmd, NULL, /* get_data */ NULL, /* put_data */ NULL /* delete_record */ }; 空のオペレーション構造体 static struct sc_card_driver *sc_get_driver(void) { if (iso_ops == NULL) iso_ops = sc_get_iso7816_driver()->ops; belpic_ops.match_card = belpic_match_card; belpic_ops.init = belpic_init; belpic_ops.finish = belpic_finish; belpic_ops.select_file = belpic_select_file; belpic_ops.read_binary = belpic_read_binary; belpic_ops.pin_cmd = belpic_pin_cmd; belpic_ops.set_security_env = belpic_set_security_env; belpic_ops.logout = belpic_logout; belpic_ops.compute_signature = belpic_compute_signature; belpic_ops.get_challenge = iso_ops->get_challenge; belpic_ops.get_response = iso_ops->get_response; belpic_ops.check_sw = iso_ops->check_sw; return &belpic_drv; } 標準実装が関数を導入 処理の流れ カードエッジ IF モジュールが上書き 最後まで実装されない関数もある 最終的にこのオペレーションセットが使用される

カードエッジ I/F モジュールの選択 ATR(Answer To Reset) リセットの直後にカードが送ってくるデータ static struct sc_atr_table belpic_atrs[] = { /* Applet V1.1 */ "3B:98:13:40:0A:A5:03:01:01:01:AD:13:11" /* Applet V1.0 with new EMV-compatible ATR */ "3B:98:94:40:0A:A5:03:01:01:01:AD:13:10" /* Applet beta 5 + V1.0 */ "3B:98:94:40:FF:A5:03:01:01:01:AD:13:10 " これを見て 使用するモジュールを選択する

カード中のデータを読み出す 例 iso7816_select_file( 3F005015 ); ファイルを選択して iso7816_read_binary( ); 読みだす

データモデル別モジュール OpenSC が必要とするデータをカードから読みだす デフォルト実装 カードに格納されているデータが PKCS#15 準拠であることが前提 PKCS#15 準拠カードから OpenSC が必要とするデータを集めるコード ID カード個別実装 :PKCS#15 エミュレーションカードモジュール PKCS#15 非準拠カードから OpenSC が必要とするデータを集めるコード PKCS#15 準拠カードでは不要

PKCS#15 カードに どんなデータが入っているのか? という設計図自身が カードに入っている 設計図は決められた場所に保存されている データは これはどんなデータだ という属性とともに 保存される 例 : 読み出し禁止フラグ ON だと読み出せない ではなく 読み出せないものは ON になっている 指示ではなく 表明

PKCS#15 IC カード EF.DIR(2F00) どんなアプリケーションがあるか ほかのアプリケーション MF(3F00) DF.CIA アプリケーション ( 例 :5015) EF.OD(5031) 何が どこにあるか? EF.PrKD データの属性 実際のプライベート鍵 EF.AOD データの属性 EF.CIO 実際の PIN コード

PKCS#15 MF EF.DIR DF.CIA ファイル構造上の親子関係参照 EF.CIAInfo EF.OD EF.AOD EF.PrKD EF.CD EF.PuKD 秘密鍵情報オブジェクト EF.DCOD 暗号情報オブジェクト (CIO) 暗号鍵情報オブジェクト 証明書情報オブジェクト データコンテナ情報オブジェクト 認証情報オブジェクト プライベート鍵情報オブジェクト公開鍵情報オブジェクト CV 証明書情報オブジェクト X.509 証明書情報オブジェクトその他の証明書情報オブジェクトデータファイル情報オブジェクトデータオブジェクト情報オブジェクトパスワード情報オブジェクト生体認証データ情報オブジェクト外部認証情報オブジェクト

BELPIC モジュール カードエッジ I/F モジュール card-belpic.c 1587 ステップ function select_file read_binary pin_cmd set_securyt_env compute_signature decipher は空のまま BELPIC は decipher をサポートしていない. PKCS#15 エミュレーションモジュール BELPIC は PKCS#15 準拠なので なし static struct sc_card_driver belpic_drv = { "Belpic cards", "belpic", &belpic_ops, NULL, 0, NULL }; static struct sc_card_driver *sc_get_driver(void) { if (iso_ops == NULL) iso_ops = sc_get_iso7816_driver()->ops; belpic_ops.match_card = belpic_match_card; belpic_ops.init = belpic_init; belpic_ops.finish = belpic_finish; belpic_ops.select_file = belpic_select_file; belpic_ops.read_binary = belpic_read_binary; belpic_ops.pin_cmd = belpic_pin_cmd; belpic_ops.set_security_env = belpic_set_security_env; belpic_ops.logout = belpic_logout; belpic_ops.compute_signature = belpic_compute_signature; belpic_ops.get_challenge = iso_ops->get_challenge; belpic_ops.get_response = iso_ops->get_response; belpic_ops.check_sw = iso_ops->check_sw; return &belpic_drv; }

belpic_compute_signature static int belpic_compute_signature(sc_card_t *card, const u8 * data, size_t data_len, u8 * out, size_t outlen){ int r; r = iso_ops->compute_signature(card, data, data_len, out, outlen); #ifdef HAVE_GUI if (r == SC_ERROR_SECURITY_STATUS_NOT_SATISFIED && SSO_OK(card->ctx)) { r = belpic_askpin_verify(card, SCR_USAGE_AUTH); if (r == 0) r = iso_ops->compute_signature(card, data, data_len, out, outlen); } #endif return r; }

iso7816_compute_singature static int iso7816_compute_signature(sc_card_t *card, const u8 * data, size_t datalen, u8 * out, size_t outlen) { int r; sc_apdu_t apdu; u8 rbuf[sc_max_apdu_buffer_size]; u8 sbuf[sc_max_apdu_buffer_size]; ダイジェストアルゴリズム? プライベート鍵? 認証? assert(card!= NULL && data!= NULL && out!= NULL); if (datalen > 255) SC_FUNC_RETURN(card->ctx, 4, SC_ERROR_INVALID_ARGUMENTS); PERFORM SECURITY OPERATION CARD COMMAND だけしか呼んでいない! /* INS: 0x2A PERFORM SECURITY OPERATION * P1: 0x9E Resp: Digital Signature * P2: 0x9A Cmd: Input for Digital Signature */ sc_format_apdu(card, &apdu, SC_APDU_CASE_4_SHORT, 0x2A, 0x9E,0x9A);

署名 / 認証 select_file プライベート鍵を選択 set_security_env 現在選択中のカギを署名に使用することを宣言 compute_signature 署名 or 認証用の暗号生成 カードコマンド一発では完了しない COMPUTE SIGNATURE コマンドは 選択されているプライベート鍵の 使用目的 によって意味が異なる 否認防止用のカギなら 署名 認証用のカギなら 認証 与えられたデータをプライベート鍵で暗号化して送り返す. 公開鍵で複合できれば 認証 OK!!

COMPUTE SIGNATURE で認証? IC ID カード 認証クライアント ネットワーク サーバ カードアプリケーション MF データモデル バルーン型の吹き出しです 図形を選択して入力します 必要に応じて大きさを変更します DF E F コントロールハンドルを移動してポインタを話者に向けます プライベート鍵 カード OS ミドルウェア署名要求 (3) 署名の計算結果 (4) 認証要求 (1) NONCE( 乱数 ) (2) 署名の計算結果 (5) 公開鍵 ( 証明書 ) 乱数発生 署名の検証 (6)

set_security_env(belpic) apdu.le = 0; apdu.data = sbuf; apdu.resplen = 0; r = sc_transmit_apdu(card, &apdu); SC_TEST_RET(card->ctx, r, "Set Security Env APDU transmit failed"); r = sc_check_sw(card, apdu.sw1, apdu.sw2); SC_TEST_RET(card->ctx, r, "Card's Set Security Env command returned error"); if (*env->key_ref == BELPIC_KEY_REF_NONREP) { #ifdef HAVE_GUI r = belpic_askpin_verify(card, SCR_USAGE_SIGN); if (r!= 0 && r!= SC_ERROR_KEYPAD_CANCELLED) sc_error(card->ctx, "Verify PIN in SET command returned %d n", r); else sc_debug(card->ctx, "Verify PIN in SET command returned %d n", r); #else sc_debug(card->ctx, "No GUI for NonRep key present, signature cancelled n"); return SC_ERROR_NOT_SUPPORTED; #endif } 否認防止用のカギだったら 毎回 PIN の入力が必須

PKCS#11 とカードエッジ I/F 署名 (Axalto Cryptoflex 32K の例 ) PKCS#11 の関数 C_LoadModule C_Initialize C_GetSloatList C_OpenSession C_Login C_Sign カードエッジ I/F の呼び出し回数 SELECT * 10 回 READ BINARY *21 回 SELECT * 1 回 VERIFY * 1 回 SELECT FILE * 1 回 ( 署名生成コマンド * 1 回 ) C_CloseSession ( 終了コマンド *1 回 ) C_Finalize 署名生成コマンドと終了コマンドは非標準 I/F

カードエッジ I/F を知れば すべてわかるつもりだったんだけど (;^_^A 認証 カードホルダを認証する VERIFY 外部認証 EXTERNAL AUTHENTICATE GENERAL AUTENTICATE 内部認証 INTERNAL AUTHENTICATE 署名 PERFORM SECURITY OPERATION(Compute Signature) 暗号化 PERFORM SECURITY OPERATION(Encipher) 復号 PERFORM SECURITY OPERATION(Decipher)

外部認証 : 正規なソフトウエア or 管理者? (PIVの例) IC カード管理アプリケーション IC カード プライベート鍵 1.nonce 要求 nonce 生成 記憶 nonce 2.nonce 返送 署名 nonce 3. 検証要求 nonce 公開鍵 Admin 作業など 4. 結果応答 nonce 検証 nonce

アプリケーション側の責任が結構たくさんある 鍵の管理 例えば外部認証 相互認証に使う鍵が安全に管理されなければならない IC カードを使うと 鍵がカードから外に出ないから安全 というのは IC カードを使ったサービスのごく一部しか見ていない 正しい手順 単純にカードエッジ I/F を呼び出すだけでは操作が完了しない バグのないコード IC カードが高度に安全でも それを使うアプリケーションにバグがあれば 全然だめ

オープンなミドルウエアがあれば 難しい仕様を みんなで実装できる 思い込みや勘違いを防げる 秘密だから安全 ではない解決策 ソースを見て 仕組みを理解できる 仕様のみから仕組みを理解するのは難しい ソースから仕様を理解するのも難しいが

参考 OpenSC http://www.opensc.org BELPIC Java Applet http://lists.musclecard.com/pipermail/muscle/2005-september/004387.html IC ID カードの相互運用可能性の向上に係る基礎調査 http://www.ipa.go.jp/security/fy18/reports/icid/index.html シーズ編 http://www.ipa.go.jp/security/fy18/reports/icid/seeds_rep.pdf