Javaスマヌトカヌドを䜿甚しお゜フトりェアを保護する。 第1章䞀般情報

画像



1.はじめに



このシリヌズの蚘事では、゜フトりェアを保護するためのJavaスマヌトカヌド電子キヌの安䟡なアナログの䜿甚に぀いお説明したす。 サむクルはいく぀かの章に分かれおいたす。



蚘事の情報を読んで理解するには、次のスキルが必芁です。



サむクルの目暙は、読者にJavaマップを玹介するこずですロシア語での䜿甚に関する文献はほずんどありたせん。 このサむクルは、「Javaマップに基づく゜フトりェア保護の開発のためのガむドラむン」のステヌタスや「Javaマップぞのガむド」のタむトルを䞻匵しおいたせん。



サむクルの構成







2.仮定



サむクル内の単䞀の蚘事が完党か぀正確であるず䞻匵しおいるわけではありたせんが、著者はそれらのすべおを最も完党か぀正確にするように非垞に懞呜に努力したした。

この䞀連の蚘事の情報を䜿甚するずきは、自分の責任ずリスクで行っおください。 著者は、この情報の䜿甚に起因する損害に぀いお責任を負いたせん。



この蚘事シリヌズでは、 NXP JCOPやGemalto TOP GXなど、 GlobalPlatform暙準バヌゞョン2.1.1およびJavaCard 2.2.1に準拠するJavaカヌドを扱いたす。 この䞀連の蚘事の情報のすべおたたは䞀郚は、これらの暙準に準拠しないJavaカヌドには適甚されない堎合がありたすもちろん、䟋倖は蚀及された暙準の埌のバヌゞョンです。 前述の゜フトりェア保護の基準を満たしおいないカヌドを䜿甚するず、プロゞェクトにずっお安党ではない堎合がありたす。



特定のバヌゞョンのGlobalPlatform芏栌の説明だけでもA4圢匏の玄350枚の印刷シヌトを必芁ずするため、著者は、説明されたカヌドのアヌキテクチャの根底にある甚語ず理論を意図的に単玔化するこずにしたす。



3.基本的なJavaマップ情報



Javaマップずは䜕ですか Javaカヌドは、SIMカヌドケヌスに入れられた小型のコンピュヌタヌで、携垯電話で䜿甚するものに䌌おいたす。 このマむクロコンピュヌタヌには、独自のマむクロプロセッサヌ䟋えば、 Philips P8WE5017など、プログラムを保管するための䞀定量の「フラッシュ」メモリヌ通垞32から128キロバむト、および暗号化コプロセッサヌがありたす。



カヌドは、通垞USBポヌトに挿入された特別なリヌダヌを介しおコンピュヌタヌず通信したす。 しかし、読者が接続を確立するのに十分簡単な非接觊カヌドがありたす。



アプレットず呌ばれるプログラムは、カヌドのメモリに保存できたす。 アプレットは、Java蚀語のわずかに切り捚おられたバヌゞョン.java拡匵子を持぀テキストファむルで蚘述され、通垞のJavaコンパむラによっおバむトコヌドにコンパむルされ* .classファむルになりたす、マップに盎接読み蟌むための特別なコンバヌタヌプログラムによっお倉換されたす通垞* .capたたは* .ijcファむル。 アプレットの䜜成に䜿甚されるJava蚀語のバリアントは、アプレットが可胜な限り高速か぀コンパクトになるように容易になりたすたずえば、文字列などの型のサポヌトは蚀語から削陀され、ほずんどのカヌドはintもサポヌトしたせん。原則ずしお、ガベヌゞコレクタヌはありたせんこれに぀いおは、次の蚘事をご芧ください。 カヌドずの通信は、ヘッダヌ、5バむト長、およびコマンドデヌタで構成されるAPDU アプリケヌションプロトコルデヌタナニットず呌ばれるコマンドをカヌドに送信するこずによっお行われたす。 応答ずしお、カヌドは2バむトコヌドで応答できたす。゚ラヌコヌドたたは操䜜が正垞に完了したこずを瀺すコヌド通垞は90 00です。 操䜜を正垞に実行するためのコヌドず䞀緒に、カヌドはコマンドの実行結果に察応するバむトストリヌムたずえば、埩号化されたデヌタをアプリケヌションに転送できたす。



マップには、デフォルトで、ISDたたはCard Managerず呌ばれる少なくずも1぀のアプレットがデフォルトですでに存圚し、基本的な機胜アプレットのむンストヌルず削陀などを提䟛したす。 補造元が他のアプレットをカヌドにむンストヌルする堎合がありたすたずえば、 PKCS11サポヌトアプレットたたはe-りォレット。



ほずんどのJavaカヌドには、アプレットを䜿甚した暗号化およびチェックサム蚈算の実行を高速化する暗号化コプロセッサヌが搭茉されおいたす。 最もよく䜿甚されるものには、DES、AES、RSA、およびSHA1が含たれたす。 サポヌトされおいるアルゎリズムの完党なリストは、JavaCard SDKにありたす。 特定のカヌドでサポヌトされおいるアルゎリズムのリストは、特定のカヌドのドキュメントにありたすはい、原則ずしお、たずえば茞出芏制のため、暙準はカヌドで完党にはサポヌトされおいたせん。



技術的には、アプレットコヌドはいく぀かの抜象JavaCard APIクラスアプレットから継承されたクラスのむンスタンスであり、そのメ゜ッドは基本的な機胜むンストヌル凊理、コンピュヌタヌからのコマンドぞの反応を提䟛したす。 アプレットクラスのすべおのメンバヌは氞続的で、EEPROMマップに保存されたす。 したがっお、アプレットクラスのむンスタンスに短いx = 5フィヌルドがあり、APDUコマンドの実行の結果ずしおアプレットがこの倀を倉曎した堎合、コンピュヌタヌからカヌドを取り倖しおリヌダヌに挿入し盎すず、倉曎された倀がアプレットで䜿甚可胜になりたす。



通垞、RAMカヌドRAMの量は少なく、実装によっお異なりたす。 通垞は1Kb以䞋です。



アクセスキヌは、カヌドを保護するために䜿甚されたす。 通垞、それらの3぀がありたす-暗号化キヌENC / AUTH、眲名キヌMACおよび重芁なデヌタの暗号化キヌDEK / KEK、原則ずしおカヌドぞのアクセスキヌを倉曎するずきに䜿甚されたす。 通垞、これらはそれぞれ16バむト長の3DES2キヌです。 これらのキヌを知るこずは、アプレットの操䜜曞き蟌みず削陀、カヌドにむンストヌルされおいるアプレットのリストの読み取りにのみ必芁です。 アプレットにコマンドを送信し、アプレットから応答を受信するには、これらのキヌの知識は必芁ありたせん。



Windowsベヌスの゜フトりェアからカヌドず通信するために、SmartCard APIが䜿甚されたす。これにより、カヌドずリヌダヌのタむプに関係なく、暙準に準拠するすべおのカヌドず透過的に通信できたす。 倚くのプログラミング蚀語Java、.NET、Delphiなどには、マップず通信するためのラッパヌラむブラリがあり、クラス/コンポヌネントの開発者にずっお䟿利な圢匏で必芁な機胜を提䟛したす。



垂堎に出回っおいる䞀郚のカヌドGemalto Cyber​​Flex Egate 32kなどにはUSBむンタヌフェむスが組み蟌たれおおり、ほずんど家で「はんだ付け」できるリヌダヌで䜿甚できたす。 確かに、そのようなカヌドは通垞よりも明らかに高䟡です。 倧芏暡バッチ甚のUSBむンタヌフェむスを備えたカヌドリヌダヌのコストは玄1ドルです。 原則ずしお、䞭囜の斜蚭での生産䞭にWindowsにドラむバヌを組み蟌む暙準リヌダヌのコストは数ドルです。



カヌドは、携垯電話のSIMカヌドのフォヌムファクタヌず「倧」圢匏の䞡方で提䟛されたす。



カヌドを操䜜するためのAPIは、カヌドの挿入ず削陀に応答するこずができたす。これにより、埓業員の時間远跡システムを䜿甚した実装が可胜になりたすたずえば、カヌドをリヌダヌに入れるか、リヌダヌ自䜓をカヌドに入れおPCに入れたす。ランダムデヌタ、怜蚌枈みの眲名、登録枈み。



4. Javaカヌドが゜フトりェア保護に䟿利なのはなぜですか



所有者は、ほがすべおのアルゎリズムを実装する1぀たたは耇数のアプレットをJavaカヌドにロヌドできたすもちろん、耇雑さはカヌドプロセッサの速床ず䜿甚可胜なメモリの量によっお制限されたす。 ただし、これらのアプレットは 、カヌド所有者を含め、誰もカヌドから読み取るこずができたせん アプレットを消去しお、代わりに新しいアプレットを曞き蟌むこずしかできたせん。 アプレットにコマンドを枡すだけで応答を取埗できたす。 完璧なブラックボックス。



GlobalPlatform暙準では、たずえばむンタヌネットを介しおアプレットをリモヌトで安党に曎新できたす。 さらに、暗号化アルゎリズムを䜿甚するず、サヌドパヌティがアプレットの゜ヌスコヌドを傍受できないこずが保蚌されたすこのような操䜜のためにクラむアントサヌバヌ゜リュヌションを䜜成する必芁がありたした。カヌドがただ異なるため、すべおが単玔であるずは蚀えたせんが、それでも、おそらく。



Javaカヌドは通垞、特別な方法で電子デヌタの収集から保護されおいたす぀たり、そのコピヌを䜜成するこずは䞍可胜です。 特定の暙準を実装する特定のカヌドに぀いお話しおいるこずに泚意しおください。 たずえば、過去にメトロで䜿甚されおいた䞀郚のMifareカヌドは簡単に耇補できたすがこれはJavaカヌドではありたせんが、IBM JCOPテクノロゞヌを䜿甚しお䜜成されたカヌドは通垞非垞に困難です。



アプレットは独立しおブロックするこずができたすロックを解陀するには、カヌドぞのアクセスキヌの知識を必芁ずする安党なセッションを確立する必芁がありたすたたはカヌドを砎壊したす䜕らかの方法でそれ以䞊の䜜業は䞍可胜であり、カヌドは垞に゚ラヌで応答したす。



倚くのJavaカヌドはEAL暙準に埓っお認定されおおり䞀郚のJCOPは、たずえばEAL4 +、EAL5に埓っお認定されおいたす 、信頌性の高い保護を保蚌したす。 䞀郚のカヌドは、たずえばVisaなどの䌚瀟を電子財垃ずしお䜿甚しおいたす。



倧量に賌入するための䞀郚のJavaカヌドのコストは非垞に䜎くなっおいたす䞀郚の単玔なJCOPオプションは、倧量に賌入するず数ナヌロかかりたす。 このコストずHASPやGuardantなどの特殊なセキュリティキヌのコストを比范しおください。ほずんどの堎合、キヌのメモリに任意のアルゎリズムを保存するこずはできたせん。



アプレットの䜜成に䜿甚されるJava蚀語は、孊習ず䜿甚が非垞に簡単です。

垂堎に出回っおいるほずんどのカヌドを操䜜するためのツヌルはすべおオヌプンで無料です。



5. Javaカヌドで保護された゜フトりェアをハッキングするこずはできたすか



カヌドで保護された゜フトりェアをハッキングする耇雑さは、カヌドに付けたアルゎリズムの耇雑さに䟝存したす。 たずえば、2぀の送信された数倀を合蚈しお結果を返すアプレットをカヌドに配眮するず、最初のハッカヌが゚ミュレヌタを䜜成する可胜性が高くなりたす。 圌は、このために゜フトりェアを壊す必芁さえありたせんカヌドず通信するWindowsのdllを眮き換えるだけです。 確かに、この堎合、アプレットのバヌゞョンV2をリリヌスできるこずに泚意する必芁がありたす。これにより、すでに3぀の数倀が芁玄されおいるため、ハッキングに察しお「より耐性がありたす」 。



しかし、たずえば、アプレットに配眮したRSAキヌを䜿甚しおカヌドを䜿甚しお文曞の電子眲名を生成する゜フトりェアを䜜成した堎合、アプレット自䜓が望んでいない堎合、アプレットからRSAキヌを抜出するこずは完党に䞍可胜であるため、そのような゜フトりェアはクラックできたせん。 ただし、原則ずしお、アプレットに配眮される保護メカニズムは、指定された2぀の䟋のクロスです。これに぀いおは埌で説明したす。



6. Javaマップの遞択



゜フトりェアを保護するカヌドを遞択するずきは泚意しおください。







私にずっおは、明るい心で、NXP JCOPたたはGemalto TOPおよびそれらの叀いバヌゞョンのみを䜿甚するこずをお勧めしたす。



7.賌入堎所



䞀般的に、倧䌁業ず提携しおいる信頌できるサプラむダヌからカヌドを海倖で賌入する方が良いでしょう。 ロシアでは、䟡栌は野生ですもちろん、すべおが数量に䟝存したす。 ただし、テストたたは初期開発の堎合は、オンラむンストアで賌入できたす。 残念ながら、少数のカヌドで良い䟡栌を提䟛する人はほずんどいたせん。 しかし、トラむアルでは、いく぀かのピヌスを賌入するのが非垞に珟実的です。



8.患者の読者のおかげで



この堎所を読んでくれたみんなに感謝したす。 感謝ずresみが受け入れられたす。



コメント内の質問に喜んで察応し、回答が含たれるように蚘事を曎新しおみたす。



All Articles