(57)【要約】      （修正有）【課題】サーバー上で保持された情報からの秘密鍵の露呈を完全に防ぐ。【解決手段】メッセージmの送信者の秘密の署名生成鍵をsk_s、受信者の公開の暗号化鍵をpk_e、乱数をr、署名をs、署名生成関数をSign、メッセージmの署名をs=Sign(sk_s,m)、秘密の署名生成鍵sk_sをランダマイズするための関数をSigningKeyRandomize、暗号化関数をEncとして（１）乱数rを用いてランダマイズされた署名生成鍵sk'_s=SigningKeyRandomize(sk_s,r)を計算し、（２）乱数rを公開の暗号化鍵をpk_eを用いて暗号化した、暗号化された乱数R=Enc(pk_e,r)を計算し、（３）メッセージmをランダマイズされた署名生成鍵sk'_sで署名した署名メッセージs'=Sign(sk'_s,m)を計算して、（４）署名メッセージs'及び暗号化された乱数Rを受信者に送信する。【選択図】図４
2011097453.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置およびメモリを有するコンピュータの処理によりメッセージ送信を行う方法であって、メッセージ m の送信者の秘密の署名生成鍵をsk_s、受信者の公開の暗号化鍵を pk_e、乱数を r、署名を s 、署名生成関数を Sign 、メッセージ m の署名を s=Sign(sk_s,m) 、前記秘密の署名生成鍵 sk_sをランダマイズするための関数をSigningKeyRandomize、暗号化関数を Enc として
（１）前記乱数 r を用いてランダマイズされた署名生成鍵sk'_s=SigningKeyRandomize(sk_s, r) を計算するステップと、
（２）前記乱数 r を前記公開の暗号化鍵を pk_e を用いて暗号化した、暗号化された乱数 R=Enc(pk_e,r)を計算するステップと、
（３）メッセージmを前記ランダマイズされた署名生成鍵sk'_sで署名した署名メッセージ s'=Sign(sk'_s, m) を計算するステップと
（４）前記署名メッセージ s' 及び前記暗号化された乱数 Rを受信者に送信するステップ
を有する、メッセージ送信方法。
【請求項２】
前記ステップ（３）が、前記乱数とは別の乱数r'を用いて、sk'_sを再度ランダマイズするためにsk''_s=SigningKeyRandomize(sk'_s, r')を計算し、再度ランダマイズされた署名生成鍵sk''_sで署名した署名メッセージs''=Sign(sk''_s, m) を計算するステップであり、
前記ステップ（４）が、前記暗号化された乱数Rとr'からr×r'の暗号文R''を計算し、（s'', R''）を受信者に送信するステップである、請求項１記載の方法。
【請求項３】
前記署名生成関数が、BLS 署名方式、Schnorr 署名方式、Lysyanskaya の署名方式、または Watersの署名方式を用いた関数である請求項１及び請求項２記載の方法。
【請求項４】
復号関数を Dec(sk_e,R)、検証関数を Verify(pk_s,s,m) として、
請求項１記載の方法によって送信された（s', R）を受信するステップと、
受信したR を前記復号関数 Dec を用いて復号し、乱数 r = Dec(sk_e,R) を計算するステップと、
受信した s' と前記メッセージ m と復号結果の r から署名 s を計算するステップと、
検証関数 Verify(pk_s,s,m) を使用して署名の検証を行うステップ
を有する、復号検証方法
【請求項５】
サーバＡが、送信者のメール送信に応答して、送信者及び受信者の情報を鍵管理センターに送信するステップと、
鍵管理センターは前記送信者及び受信者の情報をＰＫＩサーバに送信し、送信者の秘密の署名生成鍵 sk_s と受信者の公開暗号鍵 pk_e をＰＫＩサーバから得るステップと、
サーバＡが、鍵管理センターから前記秘密の署名生成鍵 sk_s を乱数 r でランダマイズした署名生成鍵sk'_s=SigningKeyRandomize(sk_s,r)と、前記乱数 r を前記受信者の公開暗号鍵pk_e で暗号化した結果 R=Enc(pk_e,r) を受信するステップと、
サーバＡが、受信者の公開の暗号化鍵を使用して、メールmの暗号文M=Enc(pk_e, m)を生成するステップと、
サーバＡが、前記sk'_sとRを使用してs'=Sign(sk'_s,m)を計算するステップと、
サーバＡが、前記メールの暗号文M と、前記（s', R） をサーバＢに送信するステップ、
を有する、メール送信方法。
【請求項６】
サーバＢが、請求項５記載の前記メールの暗号文M と、前記（s', R）を受信するステップと、
サーバＢが、送信者および受信者の情報をＰＫＩサーバに送信し、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバから得るステップと、
サーバＢが、前記受信者の秘密復号化鍵 sk_e を用いて前記暗号文M を復号して前記メールm = Dec(sk_e,M)を得て、前記 R を復号して前記乱数 r = Dec(sk_e,R) を得て、(s',m,r)から署名 s を計算するステップと、
サーバＢが、検証関数Verify(pk_s,s,m) を使用して署名の検証を行うステップを有する、メール受信方法。
【請求項７】
演算処理装置およびメモリを有するコンピュータの処理によりメッセージ送信を行うためのプログラムであって、メッセージ m の送信者の秘密の署名生成鍵をsk_s、受信者の公開の暗号化鍵を pk_e、乱数を r、署名を s 、署名生成関数を Sign 、メッセージ m の署名を s=Sign(sk_s,m) 、前記秘密の署名生成鍵 sk_sをランダマイズするための関数をSigningKeyRandomize、暗号化関数を Enc として、前記プログラムがコンピュータに、
（１）前記乱数 r を用いてランダマイズされた署名生成鍵sk'_s=SigningKeyRandomize(sk_s, r) を計算する機能と、
（２）前記乱数 r を前記公開の暗号化鍵を pk_e を用いて暗号化した、暗号化された乱数 R=Enc(pk_e,r)を計算する機能と、
（３）メッセージmを前記ランダマイズされた署名生成鍵sk'_sで署名した署名メッセージ s'=Sign(sk'_s, m) を計算する機能と
（４）前記署名メッセージ s' 及び前記暗号化された乱数 Rを受信者に送信する機能
を実行させる、メッセージ送信プログラム。
【請求項８】
前記機能（３）が、前記乱数とは別の乱数r'を用いて、sk'_sを再度ランダマイズするためにsk''_s=SigningKeyRandomize(sk'_s, r')を計算し、再度ランダマイズされた署名生成鍵sk''_sで署名した署名メッセージs''=Sign(sk''_s, m) を計算する機能であり、
前記機能（４）が、前記暗号化された乱数Rとr'からr×r'の暗号文R''を計算し、（s'', R''）を受信者に送信する機能である、請求項７記載のプログラム。
【請求項９】
前記署名生成関数が、BLS 署名方式、Schnorr 署名方式、Lysyanskaya の署名方式、または Watersの署名方式を用いた関数である請求項７及び請求項８記載のプログラム。
【請求項１０】
復号関数を Dec(sk_e,R)、検証関数を Verify(pk_s,s,m) として、
請求項７記載のプログラムによって送信された（s',R）を受信する機能と、
受信したR を前記復号関数 Dec を用いて復号し、乱数 r = Dec(sk_e,R) を計算する機能と、
受信した s' と前記メッセージ m と復号結果の r から署名 s を計算する機能と、
検証関数 Verify(pk_s,s,m) を使用して署名の検証を行う機能
を有する、復号検証プログラム
【請求項１１】
演算処理装置およびメモリを有するサーバの処理によりメール送信を行うためのプログラムであって、前記プログラムがサーバに、
送信者のメール送信に応答して、送信者及び受信者の情報を鍵管理センターに送信する機能と、
鍵管理センターが前記送信者及び受信者の情報をＰＫＩサーバに送信し、前記ＰＫＩサーバから得た、送信者の秘密の署名生成鍵 sk_s と受信者の公開暗号鍵 pk_eについて、前記秘密の署名生成鍵 sk_s を乱数 r でランダマイズした署名生成鍵 sk'_s=SigningKeyRandomize(sk_s,r)と、前記乱数 r を前記受信者の公開暗号鍵pk_e で暗号化した結果 R=Enc(pk_e,r) を鍵管理センターから受信する機能と、
受信者の公開の暗号化鍵を使用して、メールmの暗号文M=Enc(pk_e, m)を生成する機能と、
難読化された前記sk'_sとRを使用してs'=Sign(sk'_s,m)を計算する機能と、
前記メールの暗号文M と、前記（s', R） を送信する機能、
を実行させる、メール送信プログラム。
【請求項１２】
演算処理装置およびメモリを有するサーバの処理によりメール受信を行うためのプログラムであって、前記プログラムがサーバに、
請求項１１記載の、メールの暗号文M と前記（s', R）を受信する機能と、
送信者および受信者の情報をＰＫＩサーバに送信し、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバから得る機能と、
前記受信者の秘密復号化鍵 sk_e を用いて前記暗号文M を復号して前記メールm = Dec(sk_e,M)を得て、前記 R を復号して前記乱数 r = Dec(sk_e,R) を得て、(s',m,r)から署名 s を計算する機能と、
検証関数 Verify(pk_s,s,m) を使用して署名の検証を行う機能を
を実行させる、メール受信プログラム。
【請求項１３】
送信者のメール送信に応答して、送信者及び受信者の情報を鍵管理センターに送信する手段と、
鍵管理センターが前記送信者及び受信者の情報をＰＫＩサーバに送信し、前記ＰＫＩサーバから得た、送信者の秘密の署名生成鍵 sk_s と受信者の公開暗号鍵 pk_e について、前記秘密の署名生成鍵 sk_s を乱数 r でランダマイズした署名生成鍵 sk'_s=SigningKeyRandomize(sk_s,r)と、前記乱数 r を前記受信者の公開暗号鍵pk_e で暗号化した結果 R=Enc(pk_e,r) を鍵管理センターから受信する手段と、
受信者の公開の暗号化鍵を使用して、メールmの暗号文M=Enc(pk_e, m)を生成する手段と、
難読化された前記sk'_s, Rを使用してs'=Sign(sk'_s,m)を計算する手段と、
前記メールの暗号文M と、前記（s', R） をサーバＢに送信する手段、
を有する、メール送信サーバ。
【請求項１４】
請求項１３記載の前記メールの暗号文M と、前記（s', R）を受信する手段と、
送信者および受信者の情報をＰＫＩサーバに送信し、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバから得る手段と、
前記受信者の秘密復号化鍵 sk_e を用いて前記暗号文M を復号して前記メールm = Dec(sk_e,M)を得て、前記 R を復号して前記乱数 r = Dec(sk_e,R) を得て、(s',m,r)から署名 s を計算する手段と、
検証関数 Verify(pk_s,s,m) を使用して署名の検証を行う手段を有する、メール受信サーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージ（メール）の送信および受信方法に関し、特に署名付メッセージを安全に生成、送信し、それを受信する方法、システム、そのプログラムに関する。
【背景技術】
【０００２】
Ｇｍａｉl（http://mail.google.com/）などのオンライン電子メールサービスにおいて、ユーザはWebブラウザを介して、メールの送受信を行う。そのような環境で、PGPやS/MIMEで行われるように、メールを署名し、その後、暗号化することを想定する。つまり、いわゆる、Sign-then-Encrypt（StE）の処理を行うことを想定する。ブラウザには署名生成鍵や暗号化鍵を管理する機能は通常なく、StEの処理をユーザのコンピューター上でローカルに実行することはできない。したがって、署名生成鍵や暗号化鍵の情報は、サーバ上に保持され、StEの処理もサーバ上で行われることになる。例えば、送信者が受信者にメールをStEの処理をして送信する場合を考える。その場合、送信者の秘密の署名生成鍵と受信者の公開の暗号化鍵はサーバ上に保持され、送信者がブラウザ上で作成したメールに対して、サーバが、それらの鍵を使って、StEの処理をして送信する。
【０００３】
このような環境において、もしサーバに悪意をもった攻撃者（Insider/Outsiderの両方）が侵入した場合、送信者の秘密の署名生成鍵が盗まれてしまう。したがって、なんらかの保護手段が必要になる。特許文献１は、鍵公開センタに秘密の署名生成鍵を保持しないようにすることで、鍵公開センタの不正を防ぐ方法が記載されている。しかし、そもそも署名生成鍵を保持しないので、StEの処理を実行する方法を提供できない。非特許文献１は Java（商標） や C などで記述されたプログラムを難読化する様々な手法について述べており、そのような難読化ツールは市販のものも含めて数多く存在し、StEの処理プログラムを難読化することが可能であるが、それらはプログラムを読みにくくすることが目的であり秘密鍵の露呈を完全に防ぐことはできない。非特許文献２は、Re-Encryption (Decrypt-then-Encrypt 暗号文を復号して別の鍵で暗号化する操作) のための難読化の手法である。非特許文献２は、Decrypt-then-Encrypt機能のための難読化の手法であり StE機能のための難読化には利用できない。
非特許文献３はよく知られた暗号方式である。非特許文献４〜７はよく知られた署名方式である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平7-87081
【非特許文献】
【０００５】
【非特許文献１】C. Collberg, C. Thomborson and D. Low,"A Taxonomy of Obfuscating Transformations", Technical Report 148,Department of Computer Science, University of Auckland,1997.
【非特許文献２】S. Hohenberger, G. N. Rothblum, a. shelat,and V. Vaikuntanathan,"Securely Obfuscating Re-Encryption",Proceedings of TCC'07, 2007.
【非特許文献３】T. ElGamal, "A public key cryptosystemand signature scheme based on discrete logarithms," IEEE Trans. Inform.Theory, Vol. 31, pp. 469-472, 1985.
【非特許文献４】D. Boneh, B. Lynn, and H. Shacham,"Short Signatures from the Weil Pairing," Proceedings ofASIACRYPT'2001, pp. 514-532, 2001.
【非特許文献５】C. Schnorr, "Efficient SignatureGeneration by Smart Cards," J. Cryptology 4(3), pp161?174, 1991.
【非特許文献６】A. Lysyanskaya, "Unique Signatures andVerifiable Random Functions from the DH-DDH Separation," Proceedings ofCRYPTO'02, 2002.
【非特許文献７】B. Waters, "Efficient Identify-BasedEncryption Without Random Oracles," Proceedings of Eurocrypt'2005.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の課題は、サーバー上で保持された情報からの秘密鍵の露呈を完全に防ぐことを目的とする。すなわち、保持された情報を使用して、StEの処理を実行できるようし、かつ、保持された情報からは、秘密の署名生成鍵が露呈しないようにすることである。本発明は上記課題のためにサーバ上で送信者の秘密の署名生成鍵を保持するための特有の構成を有する。上記課題はオンライン電子メールサービス特有のものでなく、StEの処理を必要とするワークフロー・アプリケーションなどを提供するあらゆるWebサービスやSaaSサービスにおいて課題となる。難読化の技術として見れば、本発明の課題は秘密の署名生成鍵を保持するStEの処理を行うプログラムを秘密鍵の露呈を完全に防ぐように難読化することである。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明は、演算処理装置およびメモリを有するコンピュータの処理によりメッセージ送信を行う方法であって、メッセージ m の送信者の秘密の署名生成鍵をsk_s、受信者の公開の暗号化鍵を pk_e、乱数を r、署名を s 、署名生成関数を Sign 、メッセージ m の署名を s=Sign(sk_s,m) 、前記秘密の署名生成鍵 sk_sをランダマイズするための関数をSigningKeyRandomize、暗号化関数を Enc として
（１）前記乱数 r を用いてランダマイズされた署名生成鍵sk'_s=SigningKeyRandomize(sk_s, r) を計算するステップと、
（２）前記乱数 r を前記公開の暗号化鍵を pk_e を用いて暗号化した、暗号化された乱数 R=Enc(pk_e,r)を計算するステップと、
（３）メッセージmを前記ランダマイズされた署名生成鍵sk'_sで署名した署名メッセージ s'=Sign(sk'_s, m) を計算するステップと
（４）前記署名メッセージ s'及び前記暗号化された乱数 Rを受信者に送信するステップ
を有する。
【０００８】
ここで、前記ステップ（３）が、前記乱数とは別の乱数r'を用いて、sk'_sを再度ランダマイズするためにsk''_s=SigningKeyRandomize(sk'_s,r')を計算し、再度ランダマイズされた署名生成鍵sk''_sで署名した署名メッセージ s''=Sign(sk''_s, m) を計算するステップであり、前記ステップ（４）が、前記暗号化された乱数Rとr'からr×r'の暗号文R''を計算し、（s'', R''）を受信者に送信するステップとしてもよい。
【０００９】
ここで、前記署名生成関数を、BLS 署名方式、Schnorr 署名方式、Lysyanskaya の署名方式、または Watersの署名方式を用いた関数としても良い。また、復号関数を Dec(sk_e,R)、検証関数をVerify(pk_s,s,m) として、前記前記署名メッセージs'及び暗号化された乱数 Rを受信するステップと、受信したR を前記復号関数 Dec を用いて復号し、乱数 r = Dec(sk_e,R) を計算するステップと、受信したs' と前記メッセージ m と復号結果の r から署名 s を計算するステップと、検証関数Verify(pk_s,s,m) を使用して署名の検証を行うステップを有するようにしても良い。
【００１０】
本発明は別の態様として、サーバＡが、送信者のメール送信に応答して、送信者及び受信者の情報を鍵管理センターに送信するステップと、鍵管理センターは前記送信者及び受信者の情報をＰＫＩサーバに送信し、送信者の秘密の署名生成鍵 sk_s と受信者の公開暗号鍵 pk_e をＰＫＩサーバから得るステップと、サーバＡが、鍵管理センターから前記秘密の署名生成鍵sk_s を乱数 r でランダマイズした署名生成鍵sk'_s=SigningKeyRandomize(sk_s,r)と、前記乱数 r を前記受信者の公開暗号鍵pk_e で暗号化した結果 R=Enc(pk_e,r) を難読化されたSign-then-Encrypt（StE）プログラムとして受信するステップと、
サーバＡが、受信者の公開の暗号化鍵を使用して、メールmの暗号文M=Enc(pk_e, m)を生成するステップと、サーバＡが、難読化された前記 StEプログラム（sk'_sとR）を使用してs'=Sign(sk'_s,m)を計算するステップと、サーバＡが、前記メールの暗号文M と、前記（s', R） をサーバＢに送信するステップを有する。
【００１１】
また、サーバＢが、前記メールの暗号文M と、前記（s', R）を受信するステップと、サーバＢが、送信者および受信者の情報をＰＫＩサーバに送信し、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバから得るステップと、サーバＢが、前記受信者の秘密復号化鍵 sk_e を用いて前記暗号文M を復号して前記メールm = Dec(sk_e,M)を得て、前記 R を復号して前記乱数 r = Dec(sk_e,R) を得て、(s',m,r)から署名 s を計算するステップと、サーバＢが、検証関数 Verify(pk_s,s,m) を使用して署名の検証を行うステップを有する。
【発明の効果】
【００１２】
本発明により、万が一、送信者から受信者へ送信するためのStEの難読化されたプログラムが露呈して、攻撃者が入手したとしても、
１．攻撃者は送信者の署名偽造はできない。
２．攻撃者は、送信者から受信者以外の第３者へ送信するためのStEの処理はできない。
３．露呈したらできるだけ早く受信者の公開鍵を更新することにより、露呈したプログラムの価値をなくすことができる。その際送信者の秘密の署名生成鍵の更新は必要ない。
などの効果が期待できる。
【図面の簡単な説明】
【００１３】
【図１】従来のSign-then-Encryptの方法である。
【図２】旧来のメール送信方法の例である。
【図３】オンライン電子メールサービスにＳｔＥ処理を適用した場合の例である。
【図４】本発明の概要を示す図である。
【図５】本発明を用いたオンライン電子メールサービスにおけるＳｔＥ処理の概要である。
【図６】ステップ２の詳細な動作を示す図である。
【図７】ステップ４の詳細な動作を示す図である。
【図８】ステップ５の詳細な動作を示す図である。
【図９】各ユーザについての各種鍵の管理表である。
【図１０】各サーバが有するコンピュータ・ハードウェアのブロック図の一例である。
【図１１】ステップ１〜５の全体の処理遷移チャートである。
【発明を実施するための形態】
【００１４】
＜従来のSign-then-Encryptの方法＞
本発明の概要を説明する前に、まず従来のSign-then-Encrypt（StE）の方法を図１に示す。入力されたメッセージmにメール送信者１１０が秘密の署名生成鍵を使用して署名し、σを生成した後、受信者の公開暗号化鍵を用いて（m,σ）を暗号化し、暗号文cが作成される。送信された暗号文cは受信者１２０により復号されメッセージmとその検証結果が得られる。ＳｔＥの処理をプログラムで行う場合、ＳｔＥプログラム内に保持される情報には、送信者の秘密の署名生成鍵と受信者公開暗号化鍵が含まれる。送信された暗号文はメールの受信者１２０により、受信者の秘密の復号鍵で復号され、送信者の公開検証鍵により検証される。これを旧来のメール送信方法に当てはめた例を図２に示す。図２では送信者２１０のＰＣ上で送信者のeメールアプリケーションによりＳｔＥ処理が実行され、暗号化されたメールがサーバＡ（２３０）からサーバＢ（２４０）を経由して受信者２２０のＰＣに到達し、受信者のeメールアプリケーションで復号及び検証される。しかしながらインターネットが主体の現在のメール送受信環境では、オンライン電子メールサービスを利用するのが殆どである。このサービスはサーバが提供するので、ユーザはウェブ・ブラウザを介してメールの送受信を行う。オンライン電子メールサービスにＳｔＥ処理を適用した場合の図３に示す。送信者３１０のＰＣでメールを作成するとサーバＡ（３３０）上でＳｔＥ処理がなされ、暗号化されたメールがサーバＢに送信され、サーバＢ（３４０）で暗号化されたメールを復号し、最終的に復号及び検証されたメールが受信者３２０のＰＣに送信される。
【００１５】
＜本発明の概要＞
図３のStEの処理を普通(naive)に実装しサーバＡ（３３０）上に保持すると、そのＳｔＥプログラムから送信者の秘密の署名生成鍵が簡単に露呈する可能性がある。したがって、本発明は、このプログラムを難読化する手法を提案し、難読化されたプログラムをサーバ上に保持することにより、上述の課題を解決する。従来、JavaやCで記述されたプログラムのための汎用的な難読化ツールは数多く存在するが、あくまでプログラムを読みにくくするのが目的であり、秘密鍵の露呈を完全に防げるとは考えられていない。本発明は、ある特定のプログラミング言語のための汎用的な難読化の手法の発明ではなく、ある特定のＳｔＥプログラムのための暗号理論的な難読化を行う。本発明の本質的なアイデアは、以下の２つの処理が等価になるという特別な性質を持つ署名方式と暗号化方式のペアを設計することである。
【００１６】
１．あるメッセージが与えられとき、送信者の秘密の署名生成鍵を使用して署名し、そして、その署名データを受信者の公開暗号化鍵を使用して暗号化する。
２． あるメッセージが与えられとき、送信者の秘密の署名生成鍵を受信者の公開暗号化鍵で暗号化し、そして、その暗号化された署名生成鍵を使用してメッセージを署名する。
【００１７】
前者の処理は、難読化の対象となるＳｔＥの処理である。後者における「送信者の秘密の署名生成鍵を受信者の公開暗号化鍵で暗号化する」ことが本発明の難読化に対応する。つまり、難読化されたプログラムは、暗号化された送信者の署名生成鍵を保持し、その暗号化された署名生成鍵を使用して与えられたメッセージを署名することにより、前者のＳｔＥの処理と等価な処理を行うことができる。暗号化された送信者の署名生成鍵は、暗号化された情報であるので、そこから送信者の署名生成鍵が露呈しないことを保証できる。
【００１８】
図４に本発明の概要を図示する。従来ＳｔＥ処理部４１０は、メッセージｍを送信者の秘密署名生成で署名（４１２）してσを生成した後、受信者の公開暗号化鍵で暗号化（４１４）し、暗号文ｃを出力する。これに対して本発明では、まず、送信者の署名生成鍵を受信者の公開暗号化鍵で暗号化する（４２０）。この処理が難読化に対応する。そして、その暗号化された署名生成鍵を保持し、それを使用してメッセージｍに署名して暗号文ｃを出力する（４３２）。これを行う処理部４３０がＳｔＥ処理部４１０の難読化されたプログラムと位置づけられる。これらの処理は、メッセージmに対する署名σの暗号化を行う処理であり、メッセージmそのものの暗号化は行わない。メッセージそのものの暗号化については、受信者の公開の暗号化鍵 pk_eを使用して、標準的なハイブリッド暗号化を行えばいいので、送信者の秘密の署名生成鍵を必要としない。したがって、難読化する必要はないので、本発明による難読化の対象とはしない。
【００１９】
＜詳細な実施例＞
以下より詳細に本発明の実施例の詳細を説明する。
【００２０】
以下のような抽象的な署名方式を考える。
＜署名方式＞
署名：s=Sign(sk_s, m) （sk_sは秘密の署名生成鍵であり、mはメッセージである。そしてsは署名結果である。）
検証：Verify(pk_s, s, m)(pk_sは公開の署名検証鍵である)
署名生成関数Signは、内部的に、乱数を使用してもよい。その場合、sは確率的に生成される。
署名方式は、以下の３つの条件を満たすと仮定する。
【００２１】
署名方式条件１（署名生成鍵のランダマイズについて）：
秘密の署名生成鍵sk_sを、乱数rを使用してランダマイズするための関数sk'_s=SigningKeyRandomize(sk_s, r)が存在し、sk'_sからsk_sの情報が漏れることはない。また、再度ランダマイズしたとき、つまり、別の乱数r'を使ってsk''_s= SigningKeyRandomize(sk'_s, r')を計算したとき、sk''_s= SigningKeyRandomize(sk_s, r×r')を満たすものとする。言い換えると、rとr'で２回ランダマイズすることと、r×r'で１回ランダマイズするのとは等価である。ただし、×は乱数の空間上の加算や乗算などの演算を表す。
【００２２】
署名方式条件２（署名のランダマイズについて）：
署名sを、署名対象のメッセージmと乱数rを使用してランダマイズするための関数s'=SignatureRandomize(s,m,r)が存在し、s'からsを復元できない。また、任意の(m,r,sk_s)に関して、SignatureRandomize(Sign(sk_s,m),m, r)=Sign(SigningKeyRandomize(sk_s, r),m)が成り立つ。つまり、mの署名をrでランダマイズすることと、rでランダマイズした署名生成鍵でmの署名を計算することとは、等価である。
【００２３】
署名方式条件３（ランダマイズされた署名から元の署名の計算について）：
ランダマイズされた署名s'=SignatureRandomize(s,m, r)とメッセージmとランダマイズに使用した乱数rから、s=Sign(sk_s,m)を計算できる。
【００２４】
例えば、BLS署名方式（非特許文献４）の場合、署名生成関数Sign(sk_s, m)は、ハッシュ関数Hを使って、Exp(H(m),sk_s)として計算される。つまり、mのハッシュ値H(m)のsk_s乗として計算される。この場合、以下に説明するように、上記条件は全て満たされる。
【００２５】
署名方式条件１：
sk'_s=SigningKeyRandomize(sk_s, r)=sk_s×rとして計算できる。また、sk''_s= SigningKeyRandomize(sk'_s, r')=sk_s×r×r'であるので、sk''_s=SigningKeyRandomize(sk_s, r×r')を満たす。
【００２６】
署名方式条件２：
SignatureRandomize(s, m, r)=Exp(s,r)として計算できる。この計算にmは使用されない。
【００２７】
署名方式条件３：
ランダマイズされた署名は、s'=Exp(H(m),sk_s×r )である。したがって、s'とrから、s=Sign(sk_s,m)をExp(s', 1/r)として計算できる。この計算にmは使用されない。
【００２８】
次に、Schnorrの署名方式（非特許文献５）の場合も上記条件は全て満たされる。Schnorrの署名方式では、署名生成関数Sign(sk_s, m)は、以下の計算を行う。
１．乱数kを生成し、x=Exp(g,k)を計算する。ただし、gは公開のパラメータである。
２． ハッシュ関数Ｈを使って、e=H(m, x)を計算する。
３． y=k+e×sk_sを計算する。
４． (x,y)を署名sとして出力する。
この場合、以下に説明するように、上記条件は全て満たされる。
【００２９】
署名方式条件１：
sk'_s=SigningKeyRandomize(sk_s, r)=sk_s+rとして計算できる。また、sk''_s= SigningKeyRandomize(sk'_s,r')=sk_s+r+r'であるので、sk''_s=SigningKeyRandomize(sk_s, r+r')を満たす。
【００３０】
署名方式条件２：
SignatureRandomize(s=(x,y), m,r)=(x,y+H(m,x)×r)として計算できる。
【００３１】
署名方式条件３：
ランダマイズされた署名は、s'=(x,y'=k+H(m,x)×(sk_s+r ))である。したがって、s'とmとrから、s=Sign(sk_s,m)を(x, y'-H(m,x)×r)として計算できる。
【００３２】
さらに、Watersの署名方式（非特許文献７）の場合も上記条件は全て満たされる。Watersの署名方式では、署名生成関数Sign(sk_s, m)は、以下の計算を行う。すなわち、乱数kを生成し、(sk_s×Exp(f(m),k), Exp(g,k))を署名sとして計算する。ただし、gは公開のパラメータであり、また、fは公開の関数である。この場合、以下に説明するように、
上記条件は全て満たされる。
【００３３】
署名方式条件１：
sk'_s=SigningKeyRandomize(sk_s, r)=sk_s×rとして計算できる。また、sk''_s= SigningKeyRandomize(sk'_s, r')=sk_s×r×r'であるので、sk''_s=SigningKeyRandomize(sk_s, r×r')を満たす。
【００３４】
署名方式条件２：
SignatureRandomize(s=( sk_s×Exp(f(m),k), Exp(g,k)), m, r)=(r×sk_s×Exp(f(m),k), Exp(g,k))として計算できる。この計算にmは使用されない。
【００３５】
署名方式条件３：
ランダマイズされた署名は、s'=( s1',s2')=(r×sk_s×Exp(f(m),k), Exp(g,k))である。したがって、s'とmとrから、s=Sign(sk_s,m)を(s1'/r, s2')として計算できる。この計算にmは使用されない。
【００３６】
BLS署名方式、Schnorr署名方式、Watersの署名方式の他には、Lysyanskayaの署名方式（非特許文献６）などが上記条件を全て満たす。
【００３７】
次に、以下のような抽象的な暗号方式を考える。
＜暗号化方式＞
暗号化：c = Enc(pk_e, m) （pk_eは公開の暗号化鍵、mはメッセージ、cは暗号文）
復号：m=Dec(sk_e, c) (sk_eは秘密の復号鍵)
【００３８】
暗号化関数Encは、内部的に、乱数を使用してもよい。その場合、cは確率的に生成される。
本発明では、暗号化方式に関して、以下の２つの性質を考慮する。例えば、ElGamal暗号（非特許文献３）は両方の性質を持つ。
【００３９】
Homomorphicな性質をもつ暗号化方式
任意のメッセージのペア（m1, m2）について、m1の暗号文c1= Enc(pk_e, m1)と、m2が与えられたとき、Enc(pk_e, m1×m2)を計算できる場合、暗号化方式は、Homomorphicな性質を満たすと言う。ただし、×は署名方式条件１で説明した加算や乗算などの演算である。例えば、ElGamal暗号（非特許文献３）は乗算に関して本性質を持つ。
【００４０】
Rerandomizableな暗号化方式
この性質は、暗号文cが確率的に生成されるような暗号化方式に関する性質である。任意のメッセージmについて、その暗号文c=Enc(pk_e, m)と暗号化鍵pk_eが与えられたとき、cをRerandomizeする確率的アルゴリズムc'=Rerandomize(c,pk_e)が存在し、c=Enc(pk_e,m)の確率分布とc'=Rerandomize(c,pk_e)の確率分布が等しいならば、暗号化方式はRerandomizableであると言う。
【００４１】
以上の暗号化方式と署名方式のペアを組み合わせて、以下のようなSign-then-Encryptのプログラムを考えることができる。このプログラムが本発明での難読化の対象である。
【００４２】
＜難読化の対象となるSign-then-Encryptプログラム＞
入力：メッセージ m
プログラム内に保持される情報：送信者の秘密の署名生成鍵 sk_s と受信者の公開の暗号化鍵pk_e
出力：mの署名の暗号文
処理内容：
１．s=Sign(sk_s, m)を計算
２．乱数rを生成
３．s'=SignatureRandomize(s,m, r) を計算（署名方式条件２を参照のこと）
４．R= Enc(pk_e, r)を計算（乱数rの暗号化）
５．(s', R)を出力
【００４３】
つまり、ステップ１が署名(Sign)の処理であり、ステップ２から５が暗号化(Encrypt)の処理である。(s',R)を受信した受信者は、まずRを復号してrを計算する。つまり、r=Dec(sk_e, R)を計算する。そして、署名方式条件３にしたがって、(s',m,r)から署名sを計算する。最後に、Verify(pk_s, s, m)関数を使用して署名の検証を行う。
【００４４】
課題の説明で述べたように、このプログラムは、送信者の秘密の署名生成鍵 sk_sをそのまま保持しており、簡単に露呈する。したがって、このプログラムを難読化して、sk_sが露呈しないようにする必要がある。
【００４５】
＜難読化されたSign-then-Encryptプログラム＞
以下に2種類の難読化されたプログラムを記述する。難読化されたプログラムは、送信者の秘密の署名生成鍵sk_sをそのまま保持するのではなく、署名方式条件１にしたがって、ランダマイズした値sk'_s=SigningKeyRandomize(sk_s,r)を保持する。また、rを暗号化した暗号文R=Enc(pk_e, r)も保持する。署名方式条件１および暗号化の安全性により、これらの情報から、sk_sが漏れることはない。
【００４６】
＜難読化されたSign-then-Encryptプログラム１＞
入力：メッセージ m
プログラム内に保持される情報： 
１．sk'_s=SigningKeyRandomize(sk_s,r) 
２．R=Enc(pk_e, r)
３．受信者の公開の暗号化鍵 pk_e
出力：mの署名の暗号文
【００４７】
処理内容：
１．s'=Sign(sk'_s, m)を計算（署名方式条件２により、s'=SignatureRandomize(Sign(sk_s,m), m, r)を満たす）
２．(s', R)を出力
【００４８】
(s', R)を受信した受信者による処理は前述のものと同じである。つまり、まずRを復号してrを計算する。つまり、r=Dec(sk_e, R)を計算する。そして、署名方式条件３にしたがって、(s',m,r)から署名sを計算する。最後に、Verify(pk_s, s, m)関数を使用して署名の検証を行う。
【００４９】
上述の難読化されたプログラムは、同じメッセージmに対して、常に、出力が同じになる可能性がある。これは安全性の観点から好ましくない場合もある。以下のようにプログラムを改善すれば、出力をランダマイズできる。プログラム内に保持される情報に変更はないので、プログラムからsk_sが露呈することはない。
【００５０】
＜難読化されたSign-then-Encryptプログラム２＞
入力：メッセージ m
プログラム内に保持される情報： プログラム１の場合と同じ。
出力：mの署名の暗号
【００５１】
処理内容：
１．乱数r'を生成
２．sk''_s=SigningKeyRandomize(sk'_s, r')を計算（署名方式条件１により、sk''_s= SigningKeyRandomize(sk_s, r×r')を満たす）
３．s''=Sign(sk''_s, m)を計算（署名方式条件１および２により、s''=SignatureRandomize(Sign(sk_s,m), m, r×r')を満たす）
４．暗号化方式がHomomorphicな性質を持つ場合は、Rとr'からr×r'の暗号文R''を計算する。
【００５２】
この際、暗号化方式がrerandomizableな場合は、必要に応じて、R''をrerandomizeしてもよい。つまり、R''=Rerandomize(R'',pk_e)を計算する。そして、(s'', R'')を出力する。暗号化方式がHomomorphicな性質を持たない場合は、R''を計算できない。その場合、R'=Enc(pk_e, r')を計算し、(s'',R'')の代わりに、(s'', (R,R'))を出力する。その際、必要に応じて、R=Rerandomize(R,pk_e）を計算することにより、Rをrerandomizeしてもよい。
【００５３】
暗号化方式がHomomorphicな性質を持つ場合、(s'', R'')を受信した受信者による処理（復号検証）は以下の通りである。まずR''を復号してr×r'を計算する。つまり、r×r'=Dec(sk_e, R'')を計算する。そして、署名方式条件３にしたがって、(s',m,r×r')から署名sを計算する。最後に、Verify(pk_s,s, m)関数を使用して署名の検証を行う。
【００５４】
暗号化方式がHomomorphicな性質を持たない場合、(s'', (R,R'))を受信した受信者による処理（復号検証方法）は以下の通りである。まずRとR'を復号してrとr'を計算する。つまり、r=Dec(sk_e, R)とr'=Dec(sk_e, R')を計算する。そして、署名方式条件３にしたがって、(s',m,r×r')から署名sを計算する。最後に、Verify(pk_s,s, m)関数を使用して署名の検証を行う。
【００５５】
＜オンライン電子メールサービス＞
本発明により難読化されたプログラムを用いて、オンライン電子メールサービスにおけるStEの処理を安全に行うことができる。以下に、送信者から受信者にメールを送信する場合を例として説明する。ただし、送信者の秘密の署名生成鍵および公開の署名検証鍵、そして、受信者の公開暗号化鍵および秘密の復号鍵は、ＰＫＩに基づく鍵管理センターにて管理されていると仮定する。ＰＫＩとは Public Key Infrastructureの略で、公開鍵と秘密鍵のキーペアからなる公開鍵暗号方式を利用したセキュリティのシステムを指す。またＰＫＩサーバ６１０は、ＰＫＩシステムを実現するための証明書発行局(CA)・登録審査局(RA)の機能を提供する。すなわちＰＫＩを用いた電子証明書の発行、運用管理を行なう。ＰＫＩサーバ６１０では図９に示すように各ユーザについて、暗号化用の公開暗号化鍵、秘密復号鍵、署名用の公開検証鍵、秘密署名鍵が管理されている。
【００５６】
図５に本発明を用いたオンライン電子メールサービスにおけるＳｔＥ処理の概要を図示する。
ステップ１．送信者３１０はサーバＡ（３３０）のサービスにアクセスし、送信者３１０のブラウザ上でメールを作成し、送信ボタンを押す。メールｍはサーバＡに送信される。
ステップ２．サーバＡ（３３０）は、鍵管理センター５１０から、受信者３２０の公開暗号化鍵および送信者３１０から受信者３２０に送信するための難読化されたＳｔＥプログラムを取得する。
ステップ３. サーバＡ（３３０）は、受信者３２０の公開暗号化鍵を使用してメールの暗号文を生成し、かつＳｔＥプログラムを使用して、メールｍに対する署名の暗号文を生成する。そして、それらの暗号文をサーバＢ（３４０）に送信する。
ステップ４. サーバＢ（３４０）は、鍵管理センター（５１０）から、受信者３２０の秘密復号鍵および送信者３１０の公開署名検証鍵を取得し、暗号化されたメールを復号し、さらに、署名の復号および検証を行う。
ステップ５. 受信者３２０はサーバＢ（３４０）のサービスにアクセスし、ブラウザ上で送信者３１０からのメールを読む。この際、署名の検証結果がブラウザ上に表示される。上記ステップ２〜５についてより詳細に説明する。
【００５７】
ステップ２の詳細な動作を図６に図示する。まずサーバＡ（３３０）は鍵管理センター５１０の難読化部４２０に送信者３１０および受信者３２０の情報を送信する。ここで情報とは、送信者、受信者の名前、ユーザＩＤ等、ユーザを特定できる情報のことである。難読化部４３０は送信者及び受信者の情報をＰＫＩサーバに送信し、送信者の秘密の署名生成鍵 sk_s と受信者の公開暗号鍵 pk_e をＰＫＩサーバから得る。
【００５８】
次に難読化部４３０は送信者３１０の秘密の署名生成鍵 sk_s を乱数 r でランダマイズした署名生成鍵sk'_s=SigningKeyRandomize(sk_s,r)と、乱数 r を受信者３２０の公開暗号鍵pk_e で暗号化した結果 R=Enc(pk_e,r) をサーバＡ（３３０）へ送信する。サーバＡ（３３０）がランダマイズされた署名生成鍵 sk'_sと暗号文Rを取得することをサーバＡ（３３０）は難読化されたＳｔＥプログラムを取得すると言う。
【００５９】
ステップ３では、サーバＡ（３３０）が、まず、受信者３２０の公開暗号化鍵pk_eを使用して、前記メールmの暗号文Mを生成する。次に、難読化されたＳｔＥプログラム（sk'_sとR）を使用してs'=Sign(sk'_s,m)を計算する。そして、Mおよび（s',R）をサーバＢ（３４０）に送信する。ここで、（s',R）は前記難読化されたSign-then-Encryptプログラム１の処理結果であるが、その代わりに前記難読化されたSign-then-Encryptプログラム２の処理を実行してもよい。
【００６０】
ステップ４の詳細な動作を図７に示す。まずサーバＢ（３４０）が、暗号文Mと難読化されたＳｔＥプログラムの処理結果（s',R）を受信する。サーバＢ（３４０）は、送信者３１０および受信者３２０の情報をＰＫＩサーバ６１０に送信し、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバ６１０から得る。そして暗号文Mからメールmを復号する。
【００６１】
次にサーバＢ（３４０）は、受信者３２０の秘密復号化鍵 sk_e を用いて、R を復号して元の乱数 r を得て、署名方式条件３に従って、（s',m,r）から署名sを計算する。そして、送信者３１０の公開検証鍵 pk_s を用いてresult=Verify(pk_s,s,m)を署名の検証結果として計算する。
【００６２】
ステップ５の詳細な動作を図８に示す。受信者３２０はサーバＢ（３４０）のサービスにアクセスし、ブラウザ上で送信者３１０からのメール(ｍ)を読む。この際サーバＢ（３４０）で計算された署名の検証結果resultがブラウザ上に表示される。図８の場合は署名の検証に失敗した例である。この例では検証失敗の警告メッセージをポップアップで受信者３２０に知らせる。
【００６３】
図１１に上記各ステップ１〜５の全体の処理遷移チャートを図示する。
ステップ１１１０で、送信者３１０はサーバＡ（３３０）のサービスにアクセスし、送信者３１０のブラウザ上でメールを作成し、送信ボタンを押す。この時メールｍはサーバＡに送信される。
ステップ１１２０で、サーバＡ（３３０）は、難読化されたＳｔＥプログラムを取得するために鍵管理センター５１０にアクセスする。より具体的には、サーバＡ（３３０）は鍵管理センター５１０の難読化部４２０に送信者３１０および受信者３２０の情報を送信する。ここで情報とは、送信者、受信者の名前、ユーザＩＤ等、ユーザを特定できる情報のことである。
ステップ１１３０で、難読化部４２０は送信者３１０及び受信者３２０の情報をＰＫＩサーバ６１０に送信する。
ステップ１１４０で、ＰＫＩサーバ６１０は送信者３１０の秘密の署名生成鍵 sk_s と受信者３２０の公開暗号鍵pk_e を難読化部４２０に送信する。
ステップ１１５０で、難読化部４２０は送信者３１０の秘密の署名生成鍵 sk_s を乱数 r でランダマイズした署名生成鍵 sk'_s=SigningKeyRandomize(sk_s,r)と、乱数 r を受信者３２０の公開暗号鍵 pk_e で暗号化した結果R=Enc(pk_e,r) をサーバＡ（３３０）へ送信する。
ステップ１１６０で、サーバＡ（３３０）は、まず、受信者３２０の公開暗号化鍵pk_eを使用して、前記メールmの暗号文Mを生成する。次に、難読化されたＳｔＥプログラム（sk'_sとR）を使用してs'=Sign(sk'_s,m)を計算する。そして、Mおよび（s',R）をサーバＢ（３４０）に送信する。ここで、（s',R）は前記難読化されたSign-then-Encryptプログラム１の処理結果であるが、その代わりに前記難読化されたSign-then-Encryptプログラム２の処理を実行してもよい。
ステップ１１７０で、サーバＢ（３４０）はメール受信にあたり、暗号文Mと難読化されたＳｔＥプログラムの処理結果（s',R）を受信した後、送信者３１０および受信者３２０の情報をＰＫＩサーバ６１０に送信する。
ステップ１１８０で、ＰＫＩサーバ６１０は、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをサーバＢ（３４０）に送信する。
ステップ１１９０で、サーバＢ（３４０）は、送信者の公開検証鍵 pk_s と受信者の秘密復号化鍵 sk_eをＰＫＩサーバ６１０から得て、暗号文Mからメールｍを復号する。次に受信者３２０の秘密復号化鍵 sk_e を用いて、乱数 R を復号して元の乱数 r を得て、署名方式条件３に従って、（s',m,r）から署名sを計算する。そして、送信者３１０の公開検証鍵 pk_s を用いてresult=Verify(pk_s,s,m)を署名の検証結果として計算する。この処理が復号検証方法、復号検証プログラムに相当する処理である。最後に、受信者３２０に（m, result）を送信する。
【００６４】
＜コンピュータ・ハードウェアのブロック図＞
図１０に本発明の実施態様における、各サーバ（メール送信サーバ、メール受信サーバ）が有するコンピュータ・ハードウェアのブロック図を一例として示す。本発明の実施形態に係るコンピュータ・システム（１００１）は、ＣＰＵ（１００２）とメイン・メモリ（１００３）と含み、これらはバス（１００４）に接続されている。ＣＰＵ（１００２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ａｔｏｍ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（商標）シリーズ及びＳｅｍｐｒｏｎ（商標）などを使用することができる。
【００６５】
バス（１００４）には、ディスプレイ・コントローラ（１００５）を介して、ＬＣＤモニタなどのディスプレイ（１００６）が接続されている。ディスプレイ（１００６）は、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータ・システムについての情報と、そのコンピュータ・システム上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バス（１００４）にはまた、ＩＤＥ又はＳＡＴＡコントローラ（１００７）を介して、ハードディスク又はシリコン・ディスク（１００８）と、ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢｌｕ−ｒａｙドライブ（１００９）が接続されている。
【００６６】
ハードディスク（１００８）には、オペレーティング・システム、本発明のコードを含むプログラム（メール送信プログラム、メール受信プログラム）及びデータが、メイン・メモリ（１００３）にロード可能なように記憶されている。本発明のＳｔＥ処理に使用されるメッセージ、メール、各種鍵のデータはハードディスク（１００８）もしくはメイン・メモリ（１００３）に格納されＣＰＵ（１００２）により暗号化もしくは復号の処理が行われる。好ましくはオンライン電子メールサービスを行うプログラムはハードディスク（１００８）に記憶され必要に応じてにおいてメイン・メモリ（１００３）にロードされユーザへサービスを提供するために実行される。
【００６７】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢｌｕ−ｒａｙドライブ（１００９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢｌｕ−ｒａｙディスクからプログラムをハードディスクに追加導入するために使用される。バス（１００４）には更に、キーボード・マウスコントローラ（１０１０）を介して、キーボード（１０１１）及びマウス（１０１２）が接続されている。本発明のグラフ・データを上記外部記憶装置に記憶し、これを読み込むようにしても良い。
【００６８】
通信インタフェース（１０１４）は、例えばイーサネット（商標）・プロトコルに従う。通信インタフェース（１０１４）は、通信コントローラ（１０１３）を介してバス（１００４）に接続され、コンピュータ・システム及び通信回線（１０１５）を物理的に接続する役割を担い、コンピュータ・システムのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。なお、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。この通信インターフェース（１０１４）を介してユーザにオンライン電子メールサービスを提供する。
【符号の説明】
【００６９】
１１０、２１０、３１０  メール送信者
１２０、２２０、３２０  メール受信者
３３０  サーバＡ
３４０  サーバＢ
４１０  ＳｔＥ
４２０  難読化部
４３０  難読化されたＳｔＥプログラム
５１０  鍵管理センター
６１０  ＰＫＩサーバ
１００１  コンピュータ・システム
１００２  ＣＰＵ
１００３  メイン・メモリ
１００４  バス
１００５  ディスプレイ・コントローラ
１００６  ディスプレイ
１００７  ＩＤＥ又はＳＡＴＡコントローラ
１００８  ハードディスク又はシリコン・ディスク
１００９  ＣＤ−ＲＯＭ、ＤＶＤドライブ又はＢｌｕ−ｒａｙドライブ
１０１０  キーボード・マウスコントローラ
１０１１  キーボード
１０１２  マウス
１０１３  通信コントローラ
１０１４  通信インタフェース
１０１５  通信回線
【図１】
2011097453.tif 000003
【図２】
2011097453.tif 000004
【図３】
2011097453.tif 000005
【図４】
2011097453.tif 000006
【図５】
2011097453.tif 000007
【図６】
2011097453.tif 000008
【図７】
2011097453.tif 000009
【図８】
2011097453.tif 000010
【図９】
2011097453.tif 000011
【図１０】
2011097453.tif 000012
【図１１】
2011097453.tif 000013