たとえばpython、javascript、Ruby、Javaまたはphpなどの言語で実行されている解釈済みプログラムは、公開されたソースコードバージョンと同じではないことを暗号で証明できます改ざん?
別の言い方をすると、そのようなプログラムによって実行されるコマンド/コードが、公開されたリポジトリで指定されたすべてのコマンドとコードのみであることを確認する方法はありますか?
この質問の動機は次のとおりです。高度に洗練されたハッカーの時代、および政府機関から「バックドア」を求められてプライベートトランザクションやエクスチェンジを覗き見できる時代に、アプリケーションがハッキングされたり、ハッキングされたりしていないことを確認できますか?バックドアを追加しましたか?
たとえば、安全なメッセージングのためにpython PyBitMessage(githubのBitmessage/PyBitmessage)のようなコード)を実行しているサーバーを考えます。
または、パスワードの管理に使用され、ここで使用できるlesspass(githubのlesspass/lesspass)などのオープンソースベースのnodejsアプリケーションを検討してください( https://lesspass.com/#/ )。
または、ダウンロード可能なバージョン( https://spideroak.com/solutions/encryptr )を備えた、同様の目的の暗号化プログラム(github上のSpiderOak/Encryptr)の代替プログラム。
サイトでダウンロード、使用、インストールできるバージョンが、オープンソースコードで提供されているものとまったく同じコードを実行していることを確認する方法はありますか?
このようなアプリケーションの背後にあるチームの完全性を100%信頼している場合でも、たとえば、プログラムの実行中/ダウンロード可能なバージョンを変更してバックドアを作成するように強制されていないことをどのように確認できますか?
この重要な問題についてご協力いただきありがとうございます。
注:この質問はインタプリタされたプログラムに関係しているため、確定的または再現可能なビルドに関する会話は適用されないようで、新しい質問に値するように見えました。
実行時に確認することはできませんが、アプリケーションはロード時に検証できます(FIPS準拠のOpenSSLで確認できます)。
別の言い方をすると、そのようなプログラムによって実行されるコマンド/コードが、公開されたリポジトリで指定されたすべてのコマンドとコードのみであることを確認する方法はありますか?
可能ですが、想像した通りではありません。信頼できるソフトウェアの要件の1つは、検証可能である必要があることです。手動または静的分析を使用して検証できます。コードが検証可能でない場合、実行しているコードが実際にリポジトリに表示されるコードであることを実際に確認することはできません。
ライブラリがメモリに読み込まれると、そのライブラリの署名をライブラリの既知の適切な署名に対して実行し、読み込まれるライブラリがリポジトリから取得したものであることを確認できます。
確認方法は?
まあ、検証がコードレビューによって手動で行われ、すべての可能なテストケースが生成された時期がありましたが、システムが大きくなるにつれて、これはますます困難になります。障害や予期しないシナリオを引き起こす可能性のあるプログラムフローがソースコードに含まれていないことを確認できる静的分析ツールがいくつかあります。 (Coverityには、オープンソースプロジェクト用の無料の静的分析サービスがあります)。
実行時にコードが悪用されないことを確認したら、私たちの仕事は、コードがマシンで改ざんされないようにすることです。
改ざんされていないことをどのように確認しますか?
セキュアブート の概念があります。これは、モジュールが読み込まれるたびに、モジュールの署名を既知の適切な値と照合して検証し、問題がない場合はブートを続行させ、そうでない場合はブートが失敗するということです。ここでも同様の概念が使用されています。プログラムがロードされると、ロードされたモジュールのハッシュを既知の適切な値と比較し、それが実際に受け取ったプログラムであることを確認します。
このようにして、実行時にプログラムが誤用されないようにし、既知の適切なプログラムが確実にロードされるようにすると、プログラムが本当に必要なものであることが保証されます。