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などの各ラウンド処理の解説など
- 全部書けないけど、たぶん相当分かりやすい解説。覚えておきたい
- 基本は XOR 演算
- 公開鍵暗号
- 暗号を使った認証技術
- ダイジェスト関数の各アルゴリズムの紹介、デジタル署名、PKIなど
- OCSP:デジタル証明書の失効状態を確認する通信プロトコル。CRL(証明書失効リスト)のサイズが大きくてかつ利用者が多い場合パンクするのでそれを防ぐ
- SSL/TLS
- 通信データの暗号化→共通鍵暗号だよ
- データ改ざんの検知→メッセージ認証符号(MAC)だよ
- 通信相手の認証→デジタル証明書とPKIだよ
- ダイジェスト関数の各アルゴリズムの紹介、デジタル署名、PKIなど
- Pythonによる楕円曲線暗号の実装
- いきなりマニアックなやつきた
- 「楕円曲線暗号(ECC)」が指すもの:楕円曲線を使った暗号技術全般。あるひとつを特定するものではない
- TLSやSSH、FIDO2(なんだそれ)、ブロックチェーンなどが代表例
- 実装についてはいつも通りここには書かないという通例に則る
- 思いのほか簡単そうではあった
特集②:そろそろはじめるテスト駆動開発
- 自動テストとテスト駆動開発、その全体像
- 「テスト駆動開発」って実際どんな定義だと思ってる?→テストファーストのことをなんとなくイメージしていたが、テストファーストの上位互換的なものらしい
- この記事の冒頭では「自動テスト、テストファースト、テスト駆動開発という3つの言葉を並列で扱う」ような記載が見られたが、結局上記の問いに対する明確な回答が見当たらなかったように思う
- 自動テスト
- 自己検証可能(必須)
- assertしろということ
- 繰り返し可能(必須)
- 「CIの中でも冪等性がある」というのもここに含まれそう
- 独立している(推奨)
- 「プロダクトコードに対して」ではなく「他のテストに対して」
- 高速である(推奨)
- 自己検証可能(必須)
- テストファースト
- 「こうでもしないとテストが書かれない」という悲しき現実から生まれたモンスター
- みんな「既存のプロダクトコードからテストを書く」という作業には四苦八苦しているんだね…
- 「こうでもしないとテストが書かれない」という悲しき現実から生まれたモンスター
- テスト駆動開発
- 「テストファーストの強みを活かしつつ、保守性を上げるためにリファクタリングが組み込まれています」とのこと
- リファクタリングってプロダクトコード/テストコードどっちのだろう?どっちもかな?
- 実際には下記のような開発サイクルが用いられる
- レッド:バックログから1つピックアップ、テストから書いてまず失敗させる
- グリーン:テストを成功させる実装をする
- リファクタリング:すべてのテストが成功したままで実装コードやテストコードのリファクタリングを行う
- やっぱりどっちもだったね!
- 「テストファーストの強みを活かしつつ、保守性を上げるためにリファクタリングが組み込まれています」とのこと
- 「テスト駆動開発」って実際どんな定義だと思ってる?→テストファーストのことをなんとなくイメージしていたが、テストファーストの上位互換的なものらしい
- 自動テストの環境を構築しよう
- E2Eテストなどにも触れつつ、ユニットテストの実例としてJS+Jestの構成例を紹介しているもの。珍しく見開き2ページという小ボリュームだった
- 実践!テストファースト
- テスト駆動開発でFizzBuzzをつくる
- これとてもわかりやすい例だった。要件を並べて1つずつ関数をつくっていく、という意味では明らかにテスト駆動開発の方が優れているように見える
- 実際はそんな綺麗にモジュールが分かれないだろというツッコミがあるが、テストを書きたいからモジュール分割を意識するようになるというのがテストファーストの根本理念としてあったはずなので(あるよね…?)、やはりこれは素敵に思えた
- よい実装はテストを書きやすい、はっきりわかんだね
- テスト駆動開発でFizzBuzzをつくる
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 電子書籍で選べます。