(57)【要約】【課題】ＯＳのカーネルレベルにおけるファイルシステムを実装することなく、ストレージデバイスに記憶されたデータの秘匿性を高めるカーネルプログラム等を提供する。【解決手段】アプリケーションプログラムとストレージデバイスとの間でデータを入出力するコンピュータに搭載されたカーネルプログラムにおいて、アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力するアクセス制御手段としてコンピュータを機能させる。【選択図】図１
2015230707.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するコンピュータに搭載されたカーネルプログラムにおいて、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力するアクセス制御手段と
してコンピュータを機能させることを特徴とするカーネルプログラム。
【請求項２】
前記リレーショナルデータベースは、クライアントとＲＤＢＭＳ(Relational DataBase Management System)サーバとを一体化した軽量ＳＱＬデータベースである
ようにコンピュータを機能させることを特徴とする請求項１に記載のカーネルプログラム。
【請求項３】
ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装しない
ようにコンピュータを機能させることを特徴とする請求項１又は２に記載のカーネルプログラム。
【請求項４】
当該カーネルプログラムは、第１の秘密鍵及び第１の公開鍵を管理し、第１の公開鍵をアプリケーションプログラムへ送信すると共に、第２の秘密鍵及び第２の公開鍵を管理するアプリケーションプログラムから、第２の公開鍵を受信するアクセス認証手段を更に有し、
前記アプリケーションプログラムへ前記ソケットを介して送信するメッセージは、第１の公開鍵によって暗号化し、前記アプリケーションプログラムから前記ソケットを介して受信するメッセージは、第２の公開鍵によって暗号化されている
ようにコンピュータを機能させることを特徴とする請求項１から３のいずれか１項に記載のカーネルプログラム。
【請求項５】
前記アクセス認証手段は、前記アプリケーションプログラムのアクセス権限となるライツ(rights)を生成し、該ライツを第２の公開鍵で暗号化し、暗号化された該ライツを前記アプリケーションプログラムへ送信し、
前記アプリケーションプログラムから前記ソケットを介して受信するメッセージには、前記コマンドと共に前記ライツが含まれており、
前記アクセス制御手段は、前記アプリケーションプログラムから受信したメッセージを第１の秘密鍵によって復号し、該メッセージに含まれる前記ライツを認証し、認証成功の場合にのみ、当該コマンドを前記リレーショナルデータベースへ出力する
ようにコンピュータを機能させることを特徴とする請求項４に記載のカーネルプログラム。
【請求項６】
前記アクセス認証手段は、認証用パスワードを予め記憶しており、
前記アクセス認証手段は、前記アプリケーションプログラムから暗号化されたパスワードを受信した際に、受信したパスワードを第１の秘密鍵によって復号し、予め記憶されたパスワードと一致するか否かを認証し、認証成功の場合にのみ、前記ライツを生成する
ようにコンピュータを機能させることを特徴とする請求項５に記載のカーネルプログラム。
【請求項７】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムを実装した装置において、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力するアクセス制御手段と
を有することを特徴とする装置。
【請求項８】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムの実行方法において、
前記カーネルプログラム内に、ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースを有し、
アプリケーションプログラムとの間で、ソケット(socket)を確立する第１のステップと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力する第２のステップと
を有することを特徴とするカーネルプログラムの実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳ(Operating System)のカーネルプログラムの技術に関する。
【背景技術】
【０００２】
Unix（登録商標）やWindows（登録商標）に代表されるＯＳのカーネルプログラムは、当然にファイルシステムを内在している。「ファイルシステム」とは、ストレージデバイス（補助記憶装置、例えばＨＤＤ(Hard Disk Drive)やＳＳＤ(Solid State Drive)）との間でファイル（データ）を操作するためのファイル管理機能である。ファイルシステムは、アプリケーションから見てストレージデバイスに対するデータの格納状態を隠蔽し、抽象的なファイル操作（アクセス）インタフェースをアプリケーションに提供する。
【０００３】
このようなファイルシステムは、全てのファイルが、１つのルートディレクトリの下に配置され、１つの階層構造にあるように見せる。また、マウント(mount)によって、一方のディレクトリに他方のディレクトリを従属させることができる。これによって、アプリケーションから見て、ディレクトリ（階層構造）とファイル名とを用いて、当該ファイルを特定することができる。
【０００４】
ファイルシステムは一般的に、ファイル毎に、「所有者」「グループ」「他ユーザ」それぞれに対して、「読込みｒ」「書込みｗ」「実行ｅ」のアクセス権限を付与している。アクセス権限は、例えば以下のように３ビットずつ９ビットで表される。
「所有者」  「グループ」  「他ユーザ」
ｒ,ｗ,ｅ      ｒ,ｗ,ｅ      ｒ,ｗ,ｅ
Unixのlsコマンドで参照した場合、例えば以下のように表示される。
%ls -l owner.c
-rw-r--r-- 1 ikeda toyotsu 375 May 14 10:35 owner.c
owner.cのファイルに対して、所有者は、読込み及び書込みはできるが、直接的に実行させることはできない。また、グループメンバや他のユーザは、読込むことはできるが、書込み及び実行はさせることができない。このように、ファイルシステムは、ファイル毎にアクセス権限を管理している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００６−５０３３６９
【発明の概要】
【発明が解決しようとする課題】
【０００６】
前述した従来のファイルシステムによれば、所有者権限（又はAdministrator権限）が奪取された際、ルートディレクトリ配下の全てのファイルを読み出すことが可能となる。一方で、ストレージデバイスに記憶されたファイルのセキュリティ確保は、アプリケーションレベルで実行されている。ＯＳのカーネルプログラムは、少ない演算量で高速に処理する必要があるために、カーネルプログラムのアクセス権限の認証は極めて簡易なものとなっている。
【０００７】
しかしながら、近年、膨大な数のスマートフォンやタブレット端末が普及してきており、これら全てのコンピュータがネットワークに接続するような状況下にある。そのために、アプリケーションレベルにおけるセキュリティ確保のための演算量は極めて増大してきている。一方で、ＯＳのカーネルレベルのファイルシステムは、ストレージデバイスに対して、ファイルをディレクトリに構成して蓄積しているだけであるために、アプリケーションレベルのセキュリティが破られると、ストレージデバイスに記憶されたルートディレクトリ配下のファイルは全て、奪取されることとなる。特に、ファイルシステムに記憶されたデータが、個人情報であるほど問題となる。
【０００８】
尚、カーネルプログラムは極めて高速高精度化が追求されたものであるために、グローバルに見ても、UnixやWindows等の数種類しかない。特に、そのＯＳのカーネルレベルにおけるファイルシステムの概念自体は、旧態依然としたものに過ぎない。
【０００９】
そこで、本発明は、ＯＳのカーネルレベルにおけるファイルシステムを実装することなく、ストレージデバイスに記憶されたデータの秘匿性を高めることができるカーネルプログラム、方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するコンピュータに搭載されたカーネルプログラムにおいて、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力するアクセス制御手段と
してコンピュータを機能させることを特徴とする。
【００１１】
本発明のカーネルプログラムにおける他の実施形態によれば、
リレーショナルデータベースは、クライアントとＲＤＢＭＳ(Relational DataBase Management System)サーバとを一体化した軽量ＳＱＬデータベースである
ようにコンピュータを機能させることも好ましい。
【００１２】
本発明のカーネルプログラムにおける他の実施形態によれば、
ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装しない
ようにコンピュータを機能させることも好ましい。
【００１３】
本発明のカーネルプログラムにおける他の実施形態によれば、
当該カーネルプログラムは、第１の秘密鍵及び第１の公開鍵を管理し、第１の公開鍵をアプリケーションプログラムへ送信すると共に、第２の秘密鍵及び第２の公開鍵を管理するアプリケーションプログラムから、第２の公開鍵を受信するアクセス認証手段を更に有し、
アプリケーションプログラムへソケットを介して送信するメッセージは、第１の公開鍵によって暗号化し、アプリケーションプログラムからソケットを介して受信するメッセージは、第２の公開鍵によって暗号化されている
ようにコンピュータを機能させることも好ましい。
【００１４】
本発明のカーネルプログラムにおける他の実施形態によれば、
アクセス認証手段は、アプリケーションプログラムのアクセス権限となるライツ(rights)を生成し、該ライツを第２の公開鍵で暗号化し、暗号化された該ライツをアプリケーションプログラムへ送信し、
アプリケーションプログラムからソケットを介して受信するメッセージには、コマンドと共にライツが含まれており、
アクセス制御手段は、アプリケーションプログラムから受信したメッセージを第１の秘密鍵によって復号し、該メッセージに含まれるライツを認証し、認証成功の場合にのみ、当該コマンドをリレーショナルデータベースへ出力する
ようにコンピュータを機能させることも好ましい。
【００１５】
本発明のカーネルプログラムにおける他の実施形態によれば、
アクセス認証手段は、認証用パスワードを予め記憶しており、
アクセス認証手段は、アプリケーションプログラムから暗号化されたパスワードを受信した際に、受信したパスワードを第１の秘密鍵によって復号し、予め記憶されたパスワードと一致するか否かを認証し、認証成功の場合にのみ、ライツを生成する
ようにコンピュータを機能させることも好ましい。
【００１６】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムを実装した装置において、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力するアクセス制御手段と
を有することを特徴とする。
【００１７】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムの実行方法において、
カーネルプログラム内に、ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースを有し、
アプリケーションプログラムとの間で、ソケット(socket)を確立する第１のステップと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力する第２のステップと
を有することを特徴とする。
【発明の効果】
【００１８】
本発明のカーネルプログラム、方法及び装置は、ＯＳのカーネルレベルにおけるファイルシステムを実装することなく、ストレージデバイスに記憶されたデータの秘匿性を高めることができる。
【図面の簡単な説明】
【００１９】
【図１】本発明におけるカーネルプログラムを実装した装置の機能構成図である。
【図２】ソケットの確立とメッセージの送受信とを、コードで表記した説明図である。
【図３】ＡＰＩライブラリ部と、ソケット確立部及びアクセス制御部との間のシーケンス図である。
【図４】ＡＰＩライブラリ部とアクセス認証部との間の第１のシーケンス図である。
【図５】ＡＰＩライブラリ部とアクセス認証部との間の第２のシーケンス図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
【００２１】
図１は、本発明におけるカーネルプログラムを実装した装置の機能構成図である。
【００２２】
図１によれば、装置１は、ハードウェアとして、プロセッサ（コンピュータ）と、ＨＤＤやＳＳＤのようなストレージデバイス１０とを有する。また、ソフトウェアとして、装置に搭載されたプロセッサの実行によって機能するカーネルプログラム１１と、ＡＰＩ(Application Programming Interface)ライブラリ部１２と、アプリケーションプログラム１３とを有する。更に、本発明のカーネルプログラム１１は、リレーショナルデータベース１１１、デバイスドライバ１１２と、ソケット確立部１１３と、アクセス制御部１１４と、アクセス認証部１１５とを有する。また、これら機能構成部の処理の流れは、カーネルプログラムの実行方法としても理解できる。
【００２３】
［ＡＰＩライブラリ部１２］
ＡＰＩライブラリ部１２は、アプリケーションプログラム１３の言語と、クエリの言語（リレーショナルデータベースの言語）との間で相互に変換する機能を有する。ＡＰＩは、アプリケーション側インタフェースに対して、カーネルプログラム１１のシステムコールインタフェースを用いてシステムプログラミングとして記述したものである。
【００２４】
ここで、本発明のカーネルプログラム１１は、既存のファイルシステムに基づく、低水準のシステムコールが取り除かれている。例えば以下のようなシステムコールが取り除かれている。
open()、close()
アプリケーションレベルのセキュリティが破られた後、所有者権限でファイルシステムにアクセスされた場合、open()のような低水準システムコールは、そのファイル全体を完全に開いてしまう。そのために、簡単に全てのファイルが読み取られることとなる。そこで、本発明によれば、カーネルプログラム１１からファイルシステムを取り除くと共に、それに基づくシステムコール（open()、close()等）も取り除かれている。
【００２５】
［リレーショナルデータベース１１１］
本発明のカーネルプログラム１１は、既存のファイルシステムに代えて、リレーショナルデータベース１１１を実装している。一般に、カーネル空間のメモリ領域は、管理者権限を持っていても、読み書きすることはできない。本発明によれば、リレーショナルデータベースのみならず、プログラムコード及び動作メモリ領域も、カーネル空間に置くために、データベースの秘匿性を極めて高めることができる。
【００２６】
リレーショナルデータベース１１１は、ストレージデバイス１０との間で、デバイスドライバ１１２を介してデータを入出力する。リレーショナルデータベース１１１は、クライアントとＲＤＢＭＳサーバとを一体化した軽量ＳＱＬデータベースであって、データベース全体を１つのファイルとして扱うことができる。即ち、ストレージデバイス１０全体を、データベース用の１つのファイルとして扱うこととなる。軽量ＳＱＬデータベースとしては、具体的には「SQLite3」がある。
【００２７】
ここで注目すべきは、ＳＱＬデータベースは、ディレクトリ構造のファイルシステムと異なって、ファイル毎に取り出すことができない。即ち、ＳＱＬデータベースは全て、クエリの入力に対して、レスポンス（実行結果）を出力するものである。そのために、悪意の第三者がデータベース全体を奪取することができたとしても、そのデータベースから個々のファイルを取り出すことが極めて困難となる。本発明は、カーネルプログラム内に、既存のファイルシステムに代えて、このようなＳＱＬデータベースを実装することによって、ファイル管理のセキュリティレベルを格段に向上させようとするものである。
【００２８】
ストレージデバイス１０にどのように記憶されるかは、ＳＱＬデータベースによって全て判断される。ＳＱＬデータベースに基づく記憶構造は、外部から判断できないように、インメモリ・データベースとして高効率に構成される。即ち、ＳＱＬデータベースを用いることによって、セキュリティが破られたとしても、各ファイルの読取り又は改ざんも不可能となる。
【００２９】
従来のＳＱＬデータベースは、アプリケーションとして実行されるものであって、データベースの実体であるファイルも、既存のファイルシステム上に記憶される。既存のファイルシステム上に置かれているデータベースは、管理者権限を用いた場合、ファイル全部を、通常のコマンドで一括して読み取ることができる。
【００３０】
これに対し、本発明によれば、ＳＱＬデータベースのファイルをそのまま、デバイスドライバを介してストレージデバイスに記憶させている。ＳＱＬデータベースが、ストレージデバイスの領域を、直接的に管理することとなる。データベースを既存のファイルシステム上に配置していないために、ＯＳの管理者権限を持った者であっても、データベースのファイルの一部又は全部に対して、コピー操作をすることができない。
【００３１】
ＳＱＬデータベースのデータ実体におけるストレージデバイス１０上の配置場所は、データベース内部のデータ構造と、その管理方式を同時に熟知していなければならない。従って、データベースのデータを、ストレージデバイス１０上から意味のあるデータとして読取り又は改ざんすることは極めて困難となる。また、カーネル空間のプログラムコードやメモリ領域の情報も読み取れないために、ＳＱＬデータベース自体のプログラムコードやメモリ空間のみならず、ストレージデバイス１０上のデータの配置場所情報も読み解くことができなくなる。
【００３２】
本発明のＳＱＬデータベースとして、「SQLite」を用いている。SQLiteとは、ＰＨＰと組み合わせて使用されているＤＢＭＳ(DataBase Management System)１つであって、組み込み専用のものである。クライアント・サーバ型のＤＢＭＳ（例えばMySQLやPostgreSQL）と異なって、サーバの概念が存在しない。即ち、SQLiteは、サーバとクライアントとが一体的に構成されており、そのデータベースの内容は全て、１つのローカル領域に保存される。
【００３３】
図２は、ソケットの確立とメッセージの送受信とを、コードで表記した説明図である。
図３は、ＡＰＩライブラリ部と、ソケット確立部及びアクセス制御部との間のシーケンス図である。
【００３４】
［ソケット確立部１１３］
ソケット確立部１１３は、アプリケーションプログラム１３との間で、ソケット(socket)を確立する（図３のＳ１参照）。ソケットは、ＡＰＩライブラリ部１２（アプリケーションプログラム側）をクライアントとし、カーネルプログラム１１をサーバとして確立される。アプリケーションプログラム１３が、データにアクセスする場合、常に、確立されたソケットを介して、ＳＱＬ言語のクエリによって、そのメッセージが送信される。ソケットは、ＴＣＰ／ＩＰに基づくＩＰアドレス及びポート番号を用いて相互に通信する組をいう。本発明によれば、ＩＰアドレス及びポート番号共に、ローカルアドレスを指し示すこととなる。
【００３５】
ソケットは、アプリケーションプログラム１３から見て、抽象的なファイル構成やデータベースのメモリ空間も完全に隠蔽し、高い安全性を確保する。ソケットは、例えば以下のシステムコールを用いて確立される（図２のソケット確立部１１３参照）。
socket(domain, type, protocol)：カーネルプログラム側によるソケットの生成
domain=AF-UNIX：ローカルアドレス（UNIXドメイン）
type：通信方法
protocol：プロトコル
bind  ：カーネルプログラム側によるサーバ名及びポート番号の決定
listen：カーネルプログラム側によるソケットの受入開始
connect(s, dbname, namelen)：ＡＰＩ側によるソケットの接続
s：ソケット番号
dbname：SQLite3データベース名
namelen：nameサイズ
accept(s, name, namelen)：カーネルプログラム側によるconnectの受理
s：ソケット番号
dbname：SQLite3データベース名
namelen：nameサイズ
close  ：ＡＰＩ側によるソケットの取り外し
「domain=AF-UNIX」によって、ＩＰアドレス及びポート番号を用いることなく、１つの装置内に閉じた、同一装置内だけのソケット通信を確立することができる。これによって、他の装置から接続することができないために、セキュリティを高めることができる。
【００３６】
ソケットが確立された後、アプリケーションプログラム１３（ＡＰＩライブラリ部１２）は、ソケット通信のシステムコールを用いて、カーネルプログラム１１内のＳＱＬデータベースへアクセスする。
ここで、ＡＰＩライブラリ部１２とカーネルプログラム１１との間は、メッセージ構造体「sqmsg」を用いて通信される（図３のＳ２参照）。
struct sqmsg {
int msglen;
int reqid;
int request;
uint32_t flag;
union {
char msg[1];
struct {
int id;
char param[1];
} bind;
int value;
} u;
}
【００３７】
（クエリの送信）
ＡＰＩがクエリをカーネルプログラムへ送信するために、以下の処理を実行する。
sqmsg.msg[]にクエリを設定し、sqmsg.request=1に設定する
（予め登録されたクエリを実行する場合、sqmsg.msg[]に、BSON形式でパラメータ
を設定し、sqmsg.request=2に設定する）
即時実行を要求する場合、sqmsg.flag=1に設定する
ＡＰＩは、send()／write()を用いてsqmsgをカーネルプログラムへ送信する（図３のＳ３参照）
カーネルプログラムは、recv()／read()を用いてsqmsgを受信する（図３のＳ３参照）
【００３８】
（実行結果の受信）
カーネルプログラムは、実行結果をＡＰＩへ返信するために、以下の処理を実行する。
sqmsg.request=0に設定する
成功／失敗をsqmsg.u.valueに設定する
成功：sqmsg.u.value=0    失敗：sqmsg.u.value=-1;
sqmsg構造体に、実行結果を設定する
（予め登録されたクエリが実行された場合、sqmsg.payload[]に、BSON形式でパラ
メータを設定し、sqmsg.request=3に設定する）
カーネルプログラムは、send()／write()を用いてsqmsgをＡＰＩへ送信する（図３のＳ６参照）
ＡＰＩは、recv()／read()を用いてsqmsgを受信する（図３のＳ６参照）
尚、BSONは、バイナリ形式であって、JSONの場合、例えば以下のように表記される。
INSERT INTO A VALUES ( :a :b :c );
【００３９】
［アクセス制御部１１４］
アクセス制御部１１４は、アプリケーションプログラム１３からソケットのメッセージ構造を介してコマンドを入力し、そのコマンドをリレーショナルデータベース１１１へ出力する。また、リレーショナルデータベース１１１から実行結果を入力し、その実行結果をソケットのメッセージ構造を介してアプリケーションプログラム１３へ出力する。
【００４０】
ここで、ＡＰＩライブラリ部１２について、アプリケーションプログラム側のインタフェースと、カーネルプログラム側のシステムコールとの関係を、具体的に明示する。
（１）最初に、カーネルプログラムのリレーショナルデータベース１１１に対するＳＱＬ言語のクエリを、BSONでまとめるために、以下の関数が用意されている
int ksqlite_bind_int(struct ksqlite_stmt *stmt, char *pchar, int value)
int ksqlite_bind_double(struct ksqlite_stmt *stmt, char *pchar, double value)
int ksqlite_bind_int64(struct ksqlite_stmt *stmt, char *pchar, int64_t value)
アプリケーションプログラム１３は、これら関数を用いて、アプリケーションプログラムのメモリバッファ上に、リレーショナルデータベース１１１へのコマンドを書き込む。
（問い合わせの生成）
bson_init(&bs);                        /* BSON 問い合わせを置く領域の初期化 */
bson_append_string(&bs, ":a", "AAA");  /* 問い合わせ作成中 */
bson_append_string(&bs, ":b", "GEGE" );
bson_append_int(&bs, ":c", 10);
bson_finish(&bs);
【００４１】
（２）次に、アプリケーションプログラムは、ksqlite_prepare()によって、問い合わせ送信の準備をする。
sqm->request = 2 ;
sqm->msglen = sizeof(struct sqmsg)+ bson_size(&bs);
printf("SIZE %d\n", sqm->msglen);
memcpy(sqm->u.msg, bson_data(&bs), bson_size(&bs));
bson_destroy(&bs);
【００４２】
（３）そして、アプリケーションプログラムは、カーネルプログラム内へコマンドを送信する。
（問い合わせ送信）
send(s, sqm, sqm->msglen, 0);
printf("SEND END C\n");
【００４３】
（４）これに対し、リレーショナルデータベース１１１の実行結果は、複数をまとめることができる。アプリケーションプログラムは、これら実行結果を、ksqlite_step()で取得する。ksqlite_step()は、実行結果を完全に読み出せるまで、繰り返し呼び出す。
（問い合わせ結果の受信）
bzero(sqm->u.msg, 300);                          /*受信領域のクリア */
while(sqm->flag == 2 ){                          /*継続フラグチェック*/
rcvsize =recv(s, sqm, 500, 0);               /*受信*/
printf("rcvsize%d %d\n", rcvsize, sqm->msglen);
bson_init_finished_data(&bs, &sqm->u.msg, 0);
bson_print(&bs);                             /*データの表示（デバグ用）*/
bson_destroy(&bs);
}
データ中の「継続フラグ」によって、読み出したデータに続きがあるか/否かを判定することができる。
【００４４】
［アクセス認証部１１５］
アクセス認証部１１５は、アプリケーションプログラム１３からのアクセス権限を認証するものであって、秘密鍵及び公開鍵を管理して制御する。
（１）当該カーネルプログラム１１のアクセス認証部１１５は、「第１の秘密鍵」及び「第１の公開鍵」を管理する。そして、第１の公開鍵をアプリケーションプログラム１３へ送信して公開する。
アプリケーションプログラム１３は、カーネルプログラム１１へソケットを介して送信するメッセージを、第１の公開鍵によって暗号化する。
（２）アプリケーションプログラム１３は、「第２の秘密鍵」及び「第２の公開鍵」を管理する。そして、アプリケーションプログラム１３は、第２の公開鍵をカーネルプログラム１１のアクセス認証部１１５へ送信して公開する。
カーネルプログラム１１は、アプリケーションプログラム１３へソケットを介して送信するメッセージを、第２の公開鍵によって暗号化する。
尚、カーネルプログラム１１のアクセス認証部１１５は、認証用のパスワードも予め設定している。
【００４５】
図４は、ＡＰＩライブラリ部とアクセス認証部との間の第１のシーケンス図である。尚、図４によれば、ＡＰＩライブラリ部をアプリケーションプログラム側として、図示している。
【００４６】
（Ｓ１０１）カーネルプログラム１１側のアクセス認証部１１５は、「第１の公開鍵」を、ＡＰＩライブラリ部１２へ予め送信する。
（Ｓ１０２）ＡＰＩライブラリ部１２は、カーネルプログラム１１のリレーショナルデータベースへアクセスする場合、最初に、自ら保持する「パスワード」と、自ら生成した「第２の公開鍵」とを、Ｓ１０１によって受信した「第１の公開鍵」によって暗号化する。
（Ｓ１０３）ＡＰＩライブラリ部１２は、暗号化されたメッセージ（パスワード及び第２の公開鍵）を、システムコールによってカーネルプログラム１１へ送信する。例えば、以下のようなシステムコールを別途設定する。
sqlite3_set_authorizer()
（Ｓ１０４）カーネルプログラム１１のアクセス認証部１１５は、システムコールによって受信したメッセージを「第１の秘密鍵」によって復号し、パスワード及び第２の公開鍵を取得する。そして、その「パスワード」が、予め設定されているパスワードと一致するか否かを認証する。
（Ｓ１０５）パスワード認証に成功した場合、カーネルプログラム１１のアクセス認証部１１５は、「ライツ(rights)」を生成する。ライツとは、カーネルプログラム１１のデータベースに対するアクセス権限を意味する。
（Ｓ１０６）カーネルプログラム１１のアクセス認証部１１５は、ライツを「第２の公開鍵」によって暗号化する。
（Ｓ１０７）そして、カーネルプログラム１１のアクセス認証部１１５は、暗号化されたライツを、先のシステムコールに対する応答として、ＡＰＩライブラリ部１２へ返信する。
これによって、ＡＰＩライブラリ部１２（アプリケーションプログラム１３）は、受信したライツを「第２の秘密鍵」によって復号して取得することができる。
その後、ＡＰＩライブラリ部１２は、ＳＱＬデータベースに対するコマンドと共に、ライツを必ず付加して送信することを要する。
【００４７】
尚、ＡＰＩライブラリ部１２を介してライツを取得したアプリケーションのプロセスは、信用できる他のアプリケーションのプロセスへ、そのライツを渡すこともできる。即ち、カーネルプログラムに対して、複数のプロセスが同一のアクセス権限を持つこともできる。ライツ自体が、公開鍵方式によって暗号されているために、ライツの不正奪取も困難となる。
【００４８】
図５は、ＡＰＩライブラリ部とアクセス認証部との間の第２のシーケンス図である。図４のシーケンスに続いて、図５のシーケンスが実行される。
【００４９】
（Ｓ１）カーネルプログラム１１は、アクセス認証に成功した後（ライツをＡＰＩライブラリ部１２へ送信した後）、ソケット確立部１１３が、ＡＰＩライブラリ部１２との間で、ソケットを確立する（前述した図３のＳ１と同様）。
（Ｓ１１）ＡＰＩライブラリ部１２は、カーネルプログラム１１のＳＱＬデータベースにアクセスする「コマンド」と、先に取得した「ライツ」（図４参照）とを、「第１の公開鍵」を用いて暗号化する。
【００５０】
（Ｓ２）ＡＰＩライブラリ部１２は、暗号化されたメッセージ（コマンド及びライツ）を含む、メッセージ構造体「sqmsg」を作成する。
【００５１】
（Ｓ３）ＡＰＩライブラリ部１２は、send()／write()を用いてsqmsgをカーネルプログラムへ送信する。カーネルプログラムは、recv()／read()を用いてsqmsgを受信する。
（Ｓ３１）カーネルプログラムのアクセス制御部１１４は、sqmsgに含まれるメッセージを、「第１の秘密鍵」によって復号する。
（Ｓ３２）カーネルプログラムのアクセス制御部１１４は、復号されたライツが、自ら生成したライツと一致するか否かを認証する。
【００５２】
（Ｓ４）ライツの認証成功の場合のみ、アクセス制御部１１４は、リレーショナルデータベース１１１へ、復号されたコマンドを出力する。これによって、その検査を通ったアプリケーションプログラムのコマンドだけが、ＳＱＬデータベースへアクセスすることができる。これに対し、リレーショナルデータベース１１１は、その実行結果を返信する。
（Ｓ４１）カーネルプログラムのアクセス制御部１１４は、リレーショナルデータベース１１１からの実行結果を、「第２の公開鍵」によって暗号化する。
【００５３】
（Ｓ５）アクセス制御部１１４は、暗号化された実行結果を含む、メッセージ構造体「sqmsg」を作成する。
【００５４】
（Ｓ６）アクセス制御部１１４は、send()／write()を用いてsqmsgをＡＰＩライブラリ部１２へ送信する。ＡＰＩライブラリ部１２は、recv()／read()を用いてsqmsgを受信する。
【００５５】
（Ｓ７）ＡＰＩライブラリ部１２は、sqmsgに含まれるメッセージを、「第２の秘密鍵」によって復号する。
【００５６】
以上、詳細に説明したように、本発明のカーネルプログラム、方法及び装置は、ＯＳのカーネルレベルにおけるファイルシステムを実装することなく、ストレージデバイスに記憶されたデータの秘匿性を高めることができる。
【００５７】
本発明によれば、一般にアプリケーションとしてユーザ空間で実行されるデータベースと、カーネル空間に実装することによって、データベースに対するアクセスのみならず、その動作のメモリ領域も秘匿することができる。即ち、ＯＳに対するAdministrator権限であっても、データベースのプログラムコードやメモリ領域を読み出せないために、極めて高い秘匿性を維持することができる。
【００５８】
本発明のカーネルプログラムを実装する装置としては、個人管理データベースとして最適である。近年、個人情報を蓄積した端末から、悪意の第三者によってネットワークを介して読み取られるという問題が多い。このような問題に対し、本発明の装置によれば、個人情報全体が奪取されることができなくなる。特に、自動車に搭載するコンピュータシステムにおける記憶装置としても用いることも好ましい。将来的に自動運転が実現される社会となった際に、自動車毎のデータを秘匿性や耐改ざん性を高めることは必須の要素技術となる。本発明に基づく装置を、各個人が所有することによって、個人情報の高度なセキュリティの確保を実現することができる。
【００５９】
前述した本発明の種々の実施形態について、本発明の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本発明は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
【符号の説明】
【００６０】
１  装置
１０  ストレージデバイス
１１  カーネルプログラム
１１１  リレーショナルデータベース
１１２  デバイスドライバ
１１３  ソケット確立部
１１４  アクセス制御部
１１５  アクセス認証部
１２  ＡＰＩライブラリ部
１３  アプリケーションプログラム
【図１】
2015230707.tif 000003
【図２】
2015230707.tif 000004
【図３】
2015230707.tif 000005
【図４】
2015230707.tif 000006
【図５】
2015230707.tif 000007
【手続補正書】
【提出日】平成26年10月30日(2014.10.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するコンピュータに搭載されたカーネルプログラムにおいて、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力するアクセス制御手段と
してコンピュータを機能させ、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
前記リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置される
ことを特徴とするカーネルプログラム。
【請求項２】
前記リレーショナルデータベースは、クライアントとＲＤＢＭＳ(Relational DataBase Management System)サーバとを一体化した軽量ＳＱＬデータベースである
ようにコンピュータを機能させることを特徴とする請求項１に記載のカーネルプログラム。
【請求項３】
当該カーネルプログラムは、第１の秘密鍵及び第１の公開鍵を管理し、第１の公開鍵をアプリケーションプログラムへ送信すると共に、第２の秘密鍵及び第２の公開鍵を管理するアプリケーションプログラムから、第２の公開鍵を受信するアクセス認証手段を更に有し、
前記アプリケーションプログラムへ前記ソケットを介して送信するメッセージは、第１の公開鍵によって暗号化し、前記アプリケーションプログラムから前記ソケットを介して受信するメッセージは、第２の公開鍵によって暗号化されている
ようにコンピュータを機能させることを特徴とする請求項１又は２に記載のカーネルプログラム。
【請求項４】
前記アクセス認証手段は、前記アプリケーションプログラムのアクセス権限となるライツ(rights)を生成し、該ライツを第２の公開鍵で暗号化し、暗号化された該ライツを前記アプリケーションプログラムへ送信し、
前記アプリケーションプログラムから前記ソケットを介して受信するメッセージには、前記コマンドと共に前記ライツが含まれており、
前記アクセス制御手段は、前記アプリケーションプログラムから受信したメッセージを第１の秘密鍵によって復号し、該メッセージに含まれる前記ライツを認証し、認証成功の場合にのみ、当該コマンドを前記リレーショナルデータベースへ出力する
ようにコンピュータを機能させることを特徴とする請求項３に記載のカーネルプログラム。
【請求項５】
前記アクセス認証手段は、認証用パスワードを予め記憶しており、
前記アクセス認証手段は、前記アプリケーションプログラムから暗号化されたパスワードを受信した際に、受信したパスワードを第１の秘密鍵によって復号し、予め記憶されたパスワードと一致するか否かを認証し、認証成功の場合にのみ、前記ライツを生成する
ようにコンピュータを機能させることを特徴とする請求項４に記載のカーネルプログラム。
【請求項６】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムを実装した装置において、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力するアクセス制御手段と
を有し、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
前記リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置される
ことを特徴とする装置。
【請求項７】
アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムの実行方法において、
前記カーネルプログラム内に、ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースを有し、
アプリケーションプログラムとの間で、ソケット(socket)を確立する第１のステップと、
前記アプリケーションプログラムから前記ソケットのメッセージ構造を介してコマンドを入力し、該コマンドを前記リレーショナルデータベースへ出力すると共に、前記リレーショナルデータベースから実行結果を入力し、該実行結果を前記ソケットのメッセージ構造を介して前記アプリケーションプログラムへ出力する第２のステップと
を有し、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
前記リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置される
ことを特徴とするカーネルプログラムの実行方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するコンピュータに搭載されたカーネルプログラムにおいて、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力するアクセス制御手段と
してコンピュータを機能させ、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置されることを特徴とする。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】削除
【補正の内容】
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムを実装した装置において、
アプリケーションプログラムとの間で、ソケット(socket)を確立するソケット確立手段と、
ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力するアクセス制御手段と
を有し、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置されることを特徴とする。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１７
【補正方法】変更
【補正の内容】
【００１７】
本発明によれば、アプリケーションプログラムとストレージデバイスとの間でデータを入出力するカーネルプログラムの実行方法において、
カーネルプログラム内に、ストレージデバイスとの間で、デバイスドライバを介して、データを入出力するリレーショナルデータベースを有し、
アプリケーションプログラムとの間で、ソケット(socket)を確立する第１のステップと、
アプリケーションプログラムからソケットのメッセージ構造を介してコマンドを入力し、該コマンドをリレーショナルデータベースへ出力すると共に、リレーショナルデータベースから実行結果を入力し、該実行結果をソケットのメッセージ構造を介してアプリケーションプログラムへ出力する第２のステップと
を有し、
当該カーネルプログラムは、ファイルシステムと、当該ファイルシステムに関するシステムコールとを実装せず、
リレーショナルデータベースが管理するデータは、デバイスドライバを介してストレージデバイスのみに配置されることを特徴とする。