web-dev-qa-db-ja.com

リークを防ぐために返されたツリーを操作するVCS?

ソースコードツリーをバージョン管理システムから微妙に変更して、コードを「透かし」にするシステムがあるかどうか疑問に思っています(つまり、行末の空白、変数名を変更することさえあります)。誰がリポジトリからそれを引き出したかを知ることができるように。そのようなシステムは、開発者がコードをオンラインでアップロードするのを怖がらせると思いますか?

編集:「これは信頼の問題です」という議論に対処するために、これは架空の質問であり、開発者がソースをリークするのを防ぐ方法として考えていたことを指摘したいと思います。多くの開発者がツリー全体にアクセスできる巨大な会社のコード。

2
d33tah

これが編集とコメントで手に負えなくなる前に、私はこれを言いたかった。

これは架空の状況ではありません。ほとんどすべてのソフトウェア会社がこの問題に直面しており、それはすべて信頼の問題に要約されます。このトピックは 広範囲に議論されています他のStackExchangeサイト で、ほとんどの答えは以下に要約できます:

1-信頼できる人を雇う。

2-次にNDAを作成して署名します。

3-必要なコードのみにアクセスできるようにする

最後のポイントを拡張して、あなたが疑問に思っている状況に対処します。 Windowsの場合、すべてのMicrosoft従業員がWindowsソースコードにアクセスできるわけではないことを99%確信しています。 Windowsで作業する従業員でさえ、すべてのWindowsコードにアクセスできるわけではありません。各従業員は、自分が管理する責任のあるコードの部分にアクセスできる必要があります。

プロジェクトAの開発者は、プロジェクトBのコードなどにアクセスする必要はありません。

5
Adi

ソースコードを操作する知恵を少しの間無視して、この透かしがどのように機能するかを自問してください。開発者ごとに異なるファイルを用意する必要があります。これは、コードの意味を変更しないが、元に戻せない自動化されたコード変換を意味します。ああ、それでコードの保守が難しくなることはないはずです。結局のところ、それは貴重なコードになるはずですよね?

空白を追加しますか?それは簡単に正規化することができます。変数名を変更しますか?自分のソースツリーでソースコードを難読化するということですか?

そして、透かしが失敗した場合:「ねえ、あなたはビルドを壊しました!」 「チェックアウト時に、多分。私のために働きます。」

次に、それについて考えてください:開発者ごとに異なるファイルが必要です。バグを探すために協力しますか? 「デバッガーで問題を追跡しましたが、xが初期化されていません。」 「何x?コピーにはyzしかありません。」

どういうわけかソースコードに透かしを入れる方法を見つけたとしても、これは開発者がソースコードを取得する別の方法がない場合にのみ役立ちます。したがって、ビルドサーバーにソースアーカイブを作成させるのは簡単です。それはショーストッパーではありませんが、あなたは細い線を歩いています。

それでは、このアプローチの知恵について少し考えてみましょう。あなたは開発者に、コードを書くことを信頼している(そして、粗雑な仕事をしたり、バックドアを植えたりしないことを)と言っていますが、コードを漏らさないことを信頼していません。まず、この位置はかなり一貫性がないように見えるため、通常の開発者にはうまくいきません。第二に、あなたは彼らの仕事をより困難にし(上記を参照)、具体的な利益はありません。繰り返しますが、それは人気がないでしょう。予測可能な最終結果は、開発者がコーディング方法を一目見て、彼らのアイデアを競争に貢献し、見苦しいコードを残すことです。

なんらかの奇跡によって透かしシステムを実装できたとしても、それはどれほど役立つと思いますか?アリスのバージョンのソースコードが漏洩した場合、アリスが漏洩したことをどのようにして知ることができますか?イブがコードを漏らしたい場合、透かしを取り除くこともアリスのものに変更することもできないと仮定して、彼女はアリスのコードを漏らすことによって自分のトラックを偽装することができます。彼女はアリスのマシンに密かにアクセスする可能性があります。そのため、すべてのドライブを暗号化し、悪意あるメイド攻撃に対して開発者をトレーニングし、エディタマクロやコミットされていないパッチを共有しないという厳格なポリシーを設定する必要があります。これらの一部は優れたセキュリティ対策ですが、すべての攻撃をブロックしますパスでは、チームの効率を大幅に制限する必要もあります。

大量のコードがある場合は、ソースコードへのアクセスを制限して、各チームが作業中のモジュールのみを表示できるようにすることができます。十分な大きさのコードベースの場合、これはコンポーネント間の独立性を維持するため、実際には良好な衛生状態です。ソースコードの一部へのアクセスを制限してもうまくいかない場合は、コードが十分でないか、この透かしスキームを検討するのに十分な機密性が必要ありません。