- 翻訳元
- この記事へのパーマリンク
最も危険な場所は最も安全な場所。
もしあなたが敵対国にいるスパイなら、米国にメッセージを送るだけでも犯罪です。メッセージが暗号化されている場合、さらに大きな犯罪につながる可能性があり、当局のためにメッセージを解読することを拒否すると、さらに悪化する可能性があります。ステガノグラフィ(Steganography)とは、文字通り「隠された文字」を意味し、メッセージの存在を隠すことを指します。
Python Forensics 創設者であるチェット・ホスマーは、次のように述べています:
ステガノグラフィは、メッセージの存在を隠します。発見が容易で解読が困難な暗号とは異なり、ステガノグラフィは「ありふれた風景の中に隠れる」という最も興味深い特徴を提供します。
上記の暗号解読の引用には、あなたの知らない秘密が隠されていることに気づいていますか? もし私がそのことに触れなければ、あなたはそのことに気づくことができたでしょうか?では、その意味を理解するために、この記事の続きを読んでください。
Unicode 見えない文字
ゼロ幅文字はUnicodeテーブルの一部である非印刷文字です。その名の通り、存在すら示しません。長い文章を改行したり、絵文字をつなげたり、2つの文字を結合したり、結合を防いだりするのに使われます。
これらの文字がテキストに登場する機会がますます増えていますが、その完全な不可視性は注目に値します。非常に多くの言語や顔文字に不可欠な文字であるため、ブロックすることは不可能です。そして結局のところ、見えない文字はZWCだけではありません。たとえば、見えない区切り文字 -- U+2063。
しかし、この表にはちょっとした問題があります。GmailはU+200Bをブロックしてしまうのです。他のソフトはもちろんのこと、Twitterも不要な不可視文字をブラックリストに入れてしまうので、表にある文字はU+200C、U+200D、U+180e以外は使えません。というわけで、現在は3つの文字があります!
待ってください、U+180eは不可視ではなく、iOSデバイスでは例外的にレンダリングされます。現在は2文字のみです。
そこで、Unicodeテーブルを開き、クロスプラットフォーム/ウェブの可視性を確保するために、各可視文字のテストを開始します。幸運なことに、さらに4文字をテーブルに追加することができ、合計6つの不可視文字ができました。以上です!戦いのための準備...!
StegCloakとは何ですか?
StegCloakはJavaScript専用のステガノグラフィモジュールで、最大限の圧縮を2層、暗号化を1層行った後、プレーンテキストに秘密を隠すことができます。そのため、秘密を隠すだけでなく、任意のパスワードや他の機能のホストで保護することもできます。デモはこちら。
隠す
表示
StegCloak 秘密を隠して圧縮する方法の簡単な説明
ステップ1:秘密の圧縮と暗号化。
このようなシステム侵入において、セキュリティ・ポリシーが役割を果たすことはありませんでした。StegCloakの助けを借りて Kerckhoff満たすことを望んでいます:
理想的な暗号化システムは、高度に安全であるべきであり、鍵以外のシステムの内容全体が公開されていても安全であるべきです。
攻撃者がアルゴリズムの仕組みを認識したとしても、秘密のメッセージを解読することは不可能なはずです。
原則を満たす
この目的のためには、暗号に基づく対称暗号が必要です。人々は常に単純で壊れやすい暗号を使い慣れ、同じ暗号を何度も使用する傾向があるという事実を考慮し、与えられた暗号から強力な鍵を導き出し、ランダムソルトを導入することで鍵のランダム性を高めることにしました。同じ鍵を使って生成された複数の暗号文を分析した結果、攻撃を防ぐためには鍵にランダム性が必要です。さて、ECBやCBCのようなAESの通常のブロック暗号モードでは、少なくとも16バイトで埋め尽くされたブロックになります。 例えば、"Hi "CBCパターンを送信すると、長さが16になるようにゼロで埋められ、抽出時に削除されますが、それでは十分ではありません。したがって、ストリーム暗号モード CTR を使用して暗号文を生成します。
ステップ2:2文字を追加して再度エンコードし、圧縮します。
上に示したように、6つのZWCキャラクタがあっても、6が2のべき乗ではないため、4つしか使用されません。余分な2文字は、冗長性を減らすための抽象的なホフマン層の圧縮に使用されます。たとえば、U+200DとU+200Cです。U+200DとU+200Cが2回連続するたびに、U+2063またはU+2064に置き換えられます。冗長性がよく見られるため、大幅な節約になります。
ステップ3:カバーテキストの先頭に不可視ストリームを埋め込みます。
Hiはhello worldの6文字の中に隠されているので、文字列の全長は
10 + 6 = 16文字
抜粋
逆もまた真なりで、複雑さはほとんどありませんが、暗号化や不可視化などの機能を追加するとペイロードの長さが長くなることを考えると、コストを最小限に抑えるために2層の圧縮が行われます。その結果、抽出にはわずかなコストがかかります。
StegCloakは、ユーザーのニーズに柔軟に対応できるよう設計されています。
モジュールスタイル
関数をグラフの曲線として視覚化できれば、人生はもっと楽になる - Kyle Simpson
StegCloakは関数型プログラミングのパラダイムに従っており、一般的に、hideとshowの2つの関数のみを含んでいます。これらの2つの関数は、ビルディングブロックのような多くのコードスニペットを構築することによって構築されます。stegCloakにはencrypt()しかありませんが、これはパスワードのセキュリティを高めるためにランダムなソルトを生成するため、純粋な関数ではありません。
私の考えでは、関数的なアプローチをとることで、プログラムがよりフローチャートのように見え、可読性が向上します。
StegCloakはRamdaJS.R.Pipeという関数型プログラミングライブラリを使用しています。R.Pipeは入力関数を受け入れ、最初の関数に引数を渡し、その出力をパイプ内の次の関数の入力として使用します。これらのコード・スニペットを別のパイプにプロキシしたり、次のパイプに送る前に操作したりすることが可能であることがわかります。読みやすさと暗黙のプログラミングスタイルは、設計の最大の焦点のひとつでした。
引用文の謎を解く
*上記のChet Hosmer氏からの引用文をコピーし、移動します。
- コピーした文章を「STEGCLOAKED MESSAGE」テキストボックスに貼り付けます。
- 機密保持と観戦をご希望の方はクリックしてください!
まとめ
作っているときと同じくらい楽しんでもらえたらうれしいです!
Githubで StegCloakを検索するか、 stegcloak.surge.shをご覧ください。
この記事を読んでくださってありがとうございます。




