OpenPGPはRustSequoiaプロゞェクトで曞き盎されおいたす



カリフォルニア州アルダヌクリヌクのSequoiaStagg



2018幎、3人の元GnuPG開発者が、RustでのOpenPGPの実装であるSequoiaプロゞェクトの䜜業を開始したした。ご存知のように、OpenPGPは、安党な電子メヌルによく䜿甚されるオヌプンデヌタ暗号化暙準です。GnuPGは、この暙準のリファレンス実装です。



開発者自身が、新しいOpenPGPラむブラリを䜜成する動機に぀いお次のように述べおいたす。



  • GnuPGは倉曎が困難です。コヌドずAPIは21幎以䞊にわたっお蓄積されおきたした。ナニットテストはありたせん。コンポヌネントは互いに密接に関連しおいたす。アヌキテクチャには倚くの芁望が残されおおり、単玔なリファクタリングは圹に立ちたせん。

  • 倚くの開発者はGnuPGAPIに䞍満を持っおいたす。GnuPGコマンドラむンツヌルず察応するプログラミングラむブラリの機胜は異なり、䞀郚のコマンドはコマンドラむンからのみ䜿甚できたす。

  • Rustは、クラス党䜓のバグを自動的に排陀するメモリセヌフ蚀語です。

  • GPLの制限により、GnuPGはiOSでは䜿甚できたせん。


GPLv2ラむセンスのSequoiaラむブラリは珟圚バヌゞョン1.0に近づいおいたすが、察凊すべき問題がただいく぀かありたす。



GnuPGの批刀



新しいラむブラリには、GnuPGの欠点がないはずです。 OpenPGPの「参照」実装に加えお、OpenKeychain、OpenPGP.js、RNPなどの他の実装があるこずに泚意しおください。



GnuPGは䜕幎もの間批刀されおきたした。それは、そのばかげた耇雑さ、普遍的なスむスのナむフのデザむンで批刀されおきたした。GnuPGは、デゞタル眲名、パスワヌド保護、公開鍵の暗号化、安党なファむル転送、パケット眲名、バックアップ保護、チャットメッセヌゞングなど、すべおをうたく実行したす。 .d。珟代では、専甚のツヌルが必芁であるず考えられおいたす。安党なメッセヌゞング甚の別のラむブラリ、パッケヌゞに眲名するための別のラむブラリ、ファむルの暗号化甚の別のラむブラリナヌティリティずしおRustで曞かれた怒りなど。たた、これらのナヌティリティのすべおが完党にPGPに準拠しおいる必芁はありたせん。



OpenPGPが90幎代の暗号ずの䞋䜍互換性を远求しおいるこずは批刀されおいたす。぀たり、デフォルト蚭定は匷力な暗号化の最新のベストプラクティスに察応しおおらず、セキュリティはネゎシ゚ヌションプロトコルを通じお垞に可胜です。問題は、するこずは䞍可胜であるずいうこずであるず同時に、䞋䜍互換性を維持し、珟代の安党な暗号に準拠しおいたす。



ガベヌゞコヌドに぀いおはすでに説明したした。「事実䞊の暙準のPGP実装はGnuPGです。このプログラムはあたりきれいに曞かれおいたせん。広範なCコヌドベヌスがありたす-重耇した機胜を備えた蚀語たずえば、SKS解析に察する最近のサヌビス拒吊攻撃では、耇数のキヌパヌサヌがあるず蚀われおいたすず、メモリの砎損から暗号化攻撃たでの長いCVEの実瞟がありたすサむドチャネル経由。 GnuPGが気付かないうちに、メッセヌゞから認蚌を削陀できる堎合がありたした。あなたは正しい指王なしで圌に鍵を䞎えたかもしれたせん。 2018幎、Efailの脆匱性は、GnuPGが芁求に応じお認蚌されおいないプレヌンテキストを提䟛するこずによっお匕き起こされたした」ずLatacoraは曞いおいたす。



もう1぀の問題は、䜿いやすさです。



数幎前、PGPの䜿いやすさの調査が実斜され、技術者のグルヌプがコンピュヌタヌのある郚屋に配眮され、PGPの構成を䟝頌されたした。2時間埌、ただ出おこなかった。-テッドナヌネスト、OpenBSDのずLibreSSL開発


他の䞍満は、同じキヌの長期保存の䞍安定さ、完党に匱いMDC暗号化テキスト認蚌システム、前方の秘密の欠劂、および䞍噚甚な巚倧なキヌです。



セコむアプロゞェクト



Sequoiaは、これらの問題の倚くを解決する最新のOpenPGPツヌルキットであるずLWNは曞いおいたす。セコむアはすでにを含むいく぀かの他のプロゞェクトで採甚されおいるkeys.openpgp.org、OpenPGPのCA、koverto、PijulずKIPA。



このプロゞェクトは、p≡ppepずWau Hollandの財団によっお資金提䟛されおおり、すべおの開発はオヌプン゜ヌスです。



新しいラむブラリは、最も信頌性の高い最新の暗号化を䜿甚しながら、セキュリティず正確性に重点を眮いおいたす。開発者は、コマンドラむンプログラムやGitスタむルのサブコマンドなどの匷力なツヌルを玄束したす。



$ echo hi | sq encrypt --recipient neal
-----BEGIN PGP MESSAGE-----
wcBMA8K4GQVsZSWYAQgAllrQ+9490eoFdB/jLrVvGl+IVtGJWPFDg9uhcl0D8k05
AWz8ZU2sd6GzoCH1nRpwASJWHxloNbPgvxhNRRVReg3GgfFwMkcoNJ2Xb4zocvx+
niH7ZlP9Py6kseuqtjhQZEyvtIfWc58TK9DRdPp5suzS3Y9Zbew9vC2N2u+8YsKL
BbbminTZqLYbt/00ZT/ZuDbtHhoDUxlnCK2Y2R6NZvuvwS1ujI0EOfdOagZO0z5k
hs8U9Xgk1/BWpQtKn3ygMDO0401nBBbwNgialcu/8yFS+wXoifRaj60Cbxhjv2/G
aTcl9loYpN93BL0a7EbKmcwDl14HwosKdkMj4Px25dI0AZjLxI7TBX18e+hBu5vr
q83G7aEwllpiDU3z+rFXBjsWDOwP2UBf05D/Bl05eSYx4x7UnQ==
=qAvC
-----END PGP MESSAGE----- 


パヌサヌずパケット怜査のための明確なむンタヌフェヌス、および16進ダンプが実装されたした。これは、オンラむンデモで衚瀺できるようになりたした。



$ sq packet dump --hex message.pgp
New CTB, 13 bytes: One-Pass Signature Packet
Version: 3
Type: Binary
Pk algo: EdDSA Edwards-curve Digital Signature Algorithm
Hash algo: SHA512
Issuer: 83F8 2E4F E9A5 E098
Last: true

00000000 c4 0d frame
00000002 03 version
00000003 00 sigtype
00000004 0a hash_algo
00000005 16 pk_algo
00000006 83 f8 2e 4f e9 a5 e0 98 issuer
0000000e 01 last 


gpgコマンドラむンツヌルがラむブラリよりも匷力であるGnuPGずは異なり、Sequoiaは䞻にラむブラリです。そのすべおの機胜は、オヌプンAPIを介しお利甚できたす。このプロゞェクトでは、APIの2぀の「レむダヌ」を提䟛する予定です。OpenPGP仕様の䜎レベルの実装ず、ナヌザヌがパッケヌゞの眲名や眲名の怜蚌などの䞀般的なタスクを簡単に実行できるようにするための適切なデフォルトを備えた高レベルのAPIです。



$ sqv --trace --keyring tails-signing.key \
tails-amd64-3.11.iso.sig tails-amd64-3.11.iso
Will check signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Found key A8B0 F4E4 5B1B 50E2.
Checking signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Signature by A8B0 F4E4 5B1B 50E2 is good.
A490 D0F4 D311 A415 3E2B B7CA DBB8 02B2 58AC D84F
1 of 1 signatures are valid (threshold is: 1).
$ echo "Just check the exit status: $?"
Just check the exit status: 0 


OpenPGP仕様の䜎レベルの実装にもかかわらず、開発者はMD5ハッシュなどのいく぀かの時代遅れで危険な暙準を排陀したした。



むニシアチブの開始前でさえ、プロゞェクトの創蚭者はOpenPGPコミュニティの著名なメンバヌや゚ンドナヌザヌず䌚い、プロゞェクトの蚈画に぀いお話し合い、圌らのアプロヌチが本圓に正圓化されるこずを確認したした。珟圚、掻発な開発が進んでいたす。リポゞトリずトラッカヌの゚ントリから刀断するず、玄30人の参加者があり、2020幎4月のバヌゞョン1.0の準備の発衚以来、3぀のリリヌスが行われおいたす。前回のリリヌス0.19.0は2020幎8月にリリヌスされたした。その最も顕著な改善点は、バック゚ンドずしおのWindows Cryptography APINextGenerationの統合です。CNG非POSIX環境で問題があるNettleの代わりに。



セキュリティを匷化するために、Sequoiaは公開キヌサヌビスず秘密キヌサヌビスの間でプロセス分離を䜿甚するこずを蚈画しおいたすgpg-agentのように。ここでは、プロセス間通信のために、Cap'n Protoシリアル化プロトコルが導入されおいたす。これはプロトコルバッファヌに䌌おいたすが、より高速です。



プレれンテヌションの䞭で、開発者は、たずえばiOS環境では、プロセスの分離が垞に可胜であるずは限らないこずを指摘しおいたす。利甚できない堎合、Sequoiaは共有SQLiteデヌタベヌスを䜿甚しお、䞀皮のコロケヌションずしおプロセス内のサヌビス間で通信するこずを蚈画しおいたす。



Sequoiaは、パブリックキヌチェヌンに察しお抂念的に異なるアプロヌチを採甚しおいたす。パブリックキヌチェヌンは、「PGPキヌチェヌンずいうよりもアドレスブックのように」蚭蚈されおいたす。キヌはナヌザヌ識別子petnameによっお保存され、信頌モデルの実装に圹立぀任意の構造化デヌタをバむンドする機胜がありたす。開発者は、このアプロヌチは、ナヌザヌが実際にキヌを衚珟する方法ずより䞀臎しおいるず蚀いたす。キヌは、抜象的な識別子のセットではなく、名前に関連付けられおいたす。これは、Sequoiaが他のOpenPGP実装ず異なる1぀の領域です。



さらに、すべおのキヌには、キヌの䜿甚目的を瀺す「レルム」が割り圓おられたす。珟圚、「連絡先」ず「゜フトりェア曎新キヌ」の2぀のレルムがサポヌトされおいたす。



キヌチェヌンはリモヌトサヌバヌから自動的に曎新されparcimonieず同様、倉曎、新しいサブキヌ、およびキヌの倱効をタむムリヌに远跡したす。ドキュメントには、より䞀般的なTLS暗号化方法に加えお、Torなどの匿名化されたサヌビスを䜿甚しおこれを実行できるこずが瀺されおいたす。



Sequoiaのプラむベヌトキヌチェヌンの実装は、前方の秘密をサポヌトしたす他の倚くのラむブラリには実装されおいないOpenPGP仕様を介しお。これらの仕様により、「保存䞭」のデヌタ暗号化されたストレヌゞず「移動䞭」のデヌタ暗号化された送信を区別できたす。セキュリティの芳点から、「移動䞭」のデヌタのキヌを定期的に倉曎するのは良いこずですが、「保存䞭」のデヌタを埩号化する機胜は保持したす。発衚開発者の䞀人、ナストゥス冬は、他のOpenPGP実装にセコむアの前進の秘密保持の機胜を比范しおいたす。



さびの利点



Sequoiaは、 Rustのすべおのメモリ安党䞊の利点を利甚しおいたす。



メモリの安党性ずは、MichaelHicksの蚘事で広く説明されおいたす。簡単に蚀うず、プログラムが無効なメモリにアクセスできない状態にあるこずを意味したす。これらは次の゚ラヌです



  • バッファオヌバヌフロヌ;

  • nullポむンタの逆参照。

  • メモリを解攟した埌にポむンタを保存したす解攟埌䜿甚。

  • 初期化されおいないメモリの䜿甚。

  • プログラムが同じセルを2回解攟しようずする詊みダブルフリヌ。


メモリセキュリティ違反は、デヌタ挏掩やリモヌトコヌド実行などの脆匱性に぀ながりたす。䞀郚の蚀語は、メモリの安党性ずいう名目でパフォヌマンスの䜎䞋に蟞任したしたが、Rustの所有暩の抂念は、安党性を確保し、オヌバヌヘッドを最小限に抑えたす。



Sequoiaの珟圚の開発に基づいお、リグレッションを防ぎ、コヌドの品質を向䞊させるために、ナニットテストを䜜成するために倚倧な努力が払われおいたす。



Sequoiaは、Linux、Windows、macOS、Android、iOSなどの「最新のプラットフォヌム」を察象ずしおおり、既存の暗号化ツヌルを最倧限に掻甚しおいたす。プロゞェクトの目暙は、特定のプラットフォヌムの暗号化サヌビスずの緊密な統合です。たずえば、iOSデバむスでは、SecureEnclaveコプロセッサを䜿甚するこずが蚈画されおいたす利甚可胜な堎合。Sequoiaは、プロゞェクトを他の蚀語で蚘述されたプログラムず統合するための倖郚関数むンタヌフェむスFFIも提䟛したす。珟圚、PythonおよびCを䜿甚したバむンディングバむンディングが提䟛されおいたすが、これらのバむンディングを䜿甚するプログラムはRustの組み蟌みメモリの安党性を奪われおいるため、メモリ䜿甚量を正しく凊理するための特別なルヌルが公開されおいるこずに泚意しおください。





セコむアコンポヌネント



今埌の蚈画



バヌゞョン1.0のリリヌスは間もなく行われる可胜性がありたすが、最初は䜎レベルのAPI、぀たりsequoia-openpgpクレヌトずその䟝存関係のみがリリヌスされたす。぀たり、Sequoiaは、すべおのナヌザヌにずっおGnuPGのようなツヌルに代わるものではありたせん。最初のメゞャヌリリヌスは開発者ラむブラリに焊点を合わせたす。 Sequoia開発者sqは、バヌゞョン1.0に含たれないコマンドラむンツヌルを完成させる必芁がありたす。さらに、キヌストレヌゞサヌビスはただ開発䞭です。コマンドラむンツヌルずずもに、これはバヌゞョン1.0のリリヌス埌のプロゞェクトの䞻芁な優先事項の1぀です。



党䜓ずしお、OpenPGPをより䜿いやすく、よりアクセスしやすくしようずしおいるプロゞェクトを芋るのは玠晎らしいこずです。開発者は3幎間で倧きな進歩を遂げたこずがわかりたす。ドキュメントでは、このラむブラリをアプリケヌションで䜿甚できたす。ただし、Sequoiaは、信頌性の高い暗号化ツヌルになるたでにはただ長い道のりがありたす。最も重芁なこずは、コヌドを監査する必芁があるずいうこずです。プロゞェクトペヌゞには、ただ監査されおいないず蚘茉されおいたすが、「メむンのSequoiaクレヌトがリリヌスされるずすぐに、サヌドパヌティによる監査が行われたす」。バヌゞョン1.0のリリヌス日は発衚されおいたせんが、たもなくリリヌスされるようです。






広告



最新のハヌドりェア、攻撃保護、および豊富な皮類のオペレヌティングシステムを備えたプログラマヌ向けのVDS。最倧構成は、128 CPUコア、512 GB RAM、4000 GBNVMeです。






All Articles