中山裕雄@鳥取県です。
この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でもいけるのではないかということは 有家さん(先生)の案を採用してみまし
た。
問題点、御批判がいただければ幸いです。
中山小児科内科医院
中山裕雄