[2022年3月号] Software Design(技術評論社) サマリー+個人メモ

[2022年3月号] Software Design(技術評論社) サマリー+個人メモ
みるみ

Software Design の2022年3月号について、

  • ざっくり内容紹介
  • 個人的に気になった記事やポイント

をまとめている記事です。

サマリー記事の一覧はこちら

特集①:今さら聞けない暗号技術

  • ネット社会を支える暗号化のキホン
    • 暗号方式やハッシュ関数など初歩的な内容の記述に留まるため割愛
      • ※読みやすい入門書をお探しの方は書籍を買ったり研究室のサイトなどを漁るよりも前にこの粒度の記事を読むのがいいと思います(今号Amazon
    • 乱数の3つの性質
      • 再現不可能性
      • 予測不可能性
      • 無作為性
      • この3つはそれぞれ自分の下にある性質は包含する、つまり無作為性だけあっても乱数としては極めて貧弱であるということになる
  • 公開鍵暗号と共通鍵暗号のしくみ
    • 公開鍵暗号
      • a≡b(mod n) の読み方、「aはnを法としてbと合同」らしい
      • オイラーの定理とかユークリッドの互除法の話とか
      • 今度はいきなり数学か~い
        • RSAのところは面白かった
    • 共通鍵暗号
      • 基本は XOR 演算
        • A XOR B で暗号化、A XOR B XOR B で復号化という面白い特性がある。ストリーム暗号で主に使われるしくみ
      • 換字処理と転置処理
        • うまいことまぜこぜしてぐちゃぐちゃにするのを何度も繰り返す(対称暗号は基本全部そうだと思う)
      • DES、AES、ChaCha20などの各ラウンド処理の解説など
        • 全部書けないけど、たぶん相当分かりやすい解説。覚えておきたい
  • 暗号を使った認証技術
    • ダイジェスト関数の各アルゴリズムの紹介、デジタル署名、PKIなど
      • OCSP:デジタル証明書の失効状態を確認する通信プロトコル。CRL(証明書失効リスト)のサイズが大きくてかつ利用者が多い場合パンクするのでそれを防ぐ
    • SSL/TLS
      • 通信データの暗号化→共通鍵暗号だよ
      • データ改ざんの検知→メッセージ認証符号(MAC)だよ
      • 通信相手の認証→デジタル証明書とPKIだよ
  • Pythonによる楕円曲線暗号の実装
    • いきなりマニアックなやつきた
    • 「楕円曲線暗号(ECC)」が指すもの:楕円曲線を使った暗号技術全般。あるひとつを特定するものではない
      • TLSやSSH、FIDO2(なんだそれ)、ブロックチェーンなどが代表例
    • 実装についてはいつも通りここには書かないという通例に則る
      • 思いのほか簡単そうではあった

特集②:そろそろはじめるテスト駆動開発

  • 自動テストとテスト駆動開発、その全体像
    • 「テスト駆動開発」って実際どんな定義だと思ってる?→テストファーストのことをなんとなくイメージしていたが、テストファーストの上位互換的なものらしい
      • この記事の冒頭では「自動テスト、テストファースト、テスト駆動開発という3つの言葉を並列で扱う」ような記載が見られたが、結局上記の問いに対する明確な回答が見当たらなかったように思う
    • 自動テスト
      • 自己検証可能(必須)
        • assertしろということ
      • 繰り返し可能(必須)
        • 「CIの中でも冪等性がある」というのもここに含まれそう
      • 独立している(推奨)
        • 「プロダクトコードに対して」ではなく「他のテストに対して」
      • 高速である(推奨)
    • テストファースト
      • 「こうでもしないとテストが書かれない」という悲しき現実から生まれたモンスター
        • みんな「既存のプロダクトコードからテストを書く」という作業には四苦八苦しているんだね…
    • テスト駆動開発
      • 「テストファーストの強みを活かしつつ、保守性を上げるためにリファクタリングが組み込まれています」とのこと
        • リファクタリングってプロダクトコード/テストコードどっちのだろう?どっちもかな?
      • 実際には下記のような開発サイクルが用いられる
        • レッド:バックログから1つピックアップ、テストから書いてまず失敗させる
        • グリーン:テストを成功させる実装をする
        • リファクタリング:すべてのテストが成功したままで実装コードやテストコードのリファクタリングを行う
          • やっぱりどっちもだったね!
  • 自動テストの環境を構築しよう
    • E2Eテストなどにも触れつつ、ユニットテストの実例としてJS+Jestの構成例を紹介しているもの。珍しく見開き2ページという小ボリュームだった
  • 実践!テストファースト
    • テスト駆動開発でFizzBuzzをつくる
      • これとてもわかりやすい例だった。要件を並べて1つずつ関数をつくっていく、という意味では明らかにテスト駆動開発の方が優れているように見える
      • 実際はそんな綺麗にモジュールが分かれないだろというツッコミがあるが、テストを書きたいからモジュール分割を意識するようになるというのがテストファーストの根本理念としてあったはずなので(あるよね…?)、やはりこれは素敵に思えた
        • よい実装はテストを書きやすい、はっきりわかんだね

    Development

    • データ生成技術で理解するディープフェイクのしくみ
      • (連載2回目らしいけど先月見た覚えがない…)
      • 一般物体認識などに比べると顔はデータの対象が限定されている上に学習データを大量に用意しやすいという特徴があり、比較的容易であるとのこと
        • 同じ人の画像を集めるのも簡単だものね。だからポルノ転用されてしまいがちであると。
      • 顔入れ替え、特徴変更、表情操作など多くのバリエーションとその例が紹介されている。見るたび思うけど、得も言われぬ恐怖感がある技術だ…(たぶん「実在していないのに本物の人間が見える」という事実が奇妙で怖いのだと思う)

    OS/Network

    • 明後日のコンピューティングを知ろう「PCI Express 5.0」
      • PCI Express 5.0が出るってよ(もう出てるってよ)

    そのほか

    • ITエンジニア必須の最新用語解説「Envoy Proxy」
      • クラウドネイティブなマイクロアーキテクチャ同士の複雑なネットワークトラフィックを管理するためのプロキシ。アプリケーションから切り離してロードバランサーなどの各機構をプロキシの形で提供するというものらしい
      • 主な機能
        • L3/L4のフィルタ
        • HTTP(L7)のフィルタ
          • たぶんHTTPSも
        • HTTP(L7)のルーティング
        • HTTP/2とHTTP/1.1の相互サポート
        • フロント
          • Route 53の各ルーティング機能に近そう

    Software Design 2022年3月号

    この号の分のみ単品で読みたい方は、普通にAmazonで買うのがおすすめ。
    紙 or 電子書籍で選べます。

     

    みるみ
    みるみ

    ブロガー、ソフトウェアエンジニア。

    この「みるめも」というブログの筆者です。

    この記事へのコメント
    コメントはまだひとつもありません :)

    新しいコメントを書く

    • 必須項目はコメント本文のみですが、お名前はぜひご記入いただけると嬉しいです。
      ※メールアドレスを書いた場合も公開されることはないのでご安心ください。
    • 特定のコメントに返信したい場合は各コメントにある「返信する」ボタンからどうぞ。
    • コメントはこちらで承認の作業を行うまでは表示されません。ご了承ください。
      ※ここ数年スパムが激化しており、誤って削除されてしまうケースが増えてきました。スパムボックスも毎日自分の目で確認するようにはしているのですが、どうしても限界があります。確実に僕に連絡を取りたい方は メールTwitter からお願いします。