[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-users:01332] 電子カルテの3条件についての試行



中山裕雄@鳥取県です。

このMLでも電子カルテの3条件について色々議論がありました。

当院では過去5年分は電子データになっていますが、
3条件を具体的にどの程度クリアすれば良いか不明だったので
一応紙にも印刷してきました。この度思い切って最近の一年分以外
は電子データのみで保存しようと思います。

3条件のうちの保存性と見読性はCD-Rに焼いて
ノートPC上のソフトから直接参照したり、印刷が可能なら
特に問題は無いと考えました。

問題は真正性です。

真正性に関してはCD-Rに焼いただけでは不十分である点に関しては
ここでは議論しません。当然不可と考えます。
                  ~~~~~
真正性に関してもリアルタイムに保たれているかということと
過去のデータに関して分けて、ここでは過去保存分について
まずクリアしたいと思います。

ここに(CD-Rの中とネットワーク上)1995年末から本年春までの
電子カルテデータが5ファイルあります。

このCD-Rを封印してどこかに預ければ、その分に関してはある程度
真正性は証明できるでしょうがその後、もっと小刻みに証明タイミングを
細かく、頻回に行うための準備と考えると、現実的ではありませんね。

そこで以前から話題になるハッシュ(MessageDigest)を実装してみました。
議論にはなってもメーカー以外の個人ユーザーが実運用しているのはまだ
少ないと思いますが、問題点や既に運用しているよ、とかご助言をいただければ
幸いです。ただし、一部を改竄して、同じハッシュ値に揃える可能性については
それができることを実行して証明されるまでは、不可能であると考えます。

自己責任による証明なので、現実的にきわめて難しい理論上の可能性を
議論していても先に進めないからです。

まずshadigest.java という以下のようなプログラムを作りました。

import java.security.MessageDigest;
import java.io.FileInputStream;

public class shadigest {
    public static void main(String filename[]) {
	try {
	    MessageDigest md = MessageDigest.getInstance("SHA-1");
	    for(int i=0; i<filename.length; i++) {
		FileInputStream fin = new FileInputStream(filename[i]);
		byte[] buffer = new byte[256];
		while(true) {
		    int len = fin.read(buffer);
		    if(len < 0) break;
		    md.update(buffer, 0, len);
		}
		fin.close();
		byte[] bytes = md.digest();

		char[] digits = {'0','1','2','3','4','5','6','7',
				'8','9','a','b','c','d','e','f'};

		System.out.print("SH1 (" + filename[i] + ") = ");
		StringBuffer s = new StringBuffer(bytes.length * 2);
		for(int j=0; j<bytes.length; j++) {
			byte b = bytes[j];
			s.append(digits[(b & 0xf0) >> 4]);
			s.append(digits[b & 0x0f]);
		}
		System.out.print(s.toString());
		System.out.println();
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
}

このプログラムでCD-Rに焼いてある6個のプログラムのMessageDigestをSHA-1という
アルゴリズムで算出すると以下のようになります。

上記をjavacして
java shadigest D:¥* として実行します。

SH1 (d:\19951201_19970331.mdb) = 8227f65a63f2a7ed209e2b1ecd3b681053d09c8f
SH1 (d:\19970401_19980331.mdb) = 7a4ea866a83fce3832f1232f12ed94233ad62c93
SH1 (d:\19980401_19990331.mdb) = de54242dccded5dddfd3732c349b9aa40c121333
SH1 (d:\19990401_20000331.mdb) = 3644200acb86fb0c5ea8d248b100c2e16cf814a6
SH1 (d:\20000401_20010331.mdb) = c0b80b7feb74894733dabc8ea8c6cc4ad7a84d43
SH1 (d:\20010401_20020331.mdb) = 56ff5013f32d07352a11b291363844e1d514c026

今回はこのorca-usersを利用して上記ハッシュ値を公開しましたので、
公開の現時点以降はファイルは改竄していない証明とします。
つまりファイルを開く前にプログラムを動作させて、ハッシュ値を提示し、
本日のMLの書き込みの値と同じならば、本日以降は内容に手を加えてない
ということです。

これをもっと細かく行えば、真正性を証明できると思いますがいかがでしょう。
問題はメーリングリストをこの目的で使い続ける訳には行きませんので、
多くの電子カルテユーザーがファイルのハッシュ値を公開する目的のMLを末永く
運用できる組織(日医総研など)が提供すれば、少なくともハッシュ値を公開した
ファイルと公開以降の真正性は証明できるのではと考えました。
もちろんMLがWebで公開されいることや、簡単に消滅したり書き換えられないように
メンテナンスされていることが前提です。
MLでもいけるのではないかということは 有家さん(先生)の案を採用してみまし
た。

問題点、御批判がいただければ幸いです。

中山小児科内科医院
中山裕雄