圧縮率を改善するためにテキストを最適化する話

GMOアドマーケティングのT.Kです。担当しているサービスで1回のリクエストに対するレスポンス内に複数のURLを含んでいます。URLには共通のパラメータと固有のパラメータがあり、セキュリティーの観点からそれらのパラメータを結合してから暗号化を施して1つの巨大なパラメータ値にしていました。暗号化したデータはGZIP圧縮と相性が悪く圧縮率が低かったです。
ブロック暗号のCBCモードは1ビットでも変化すると、それ以降の暗号文すべてが変化します。逆に言えば共通のパラメータを先頭に配置して結合する事で、暗号文も途中までは同じになり圧縮率を改善出来ます。

検証

  • 前提条件
    下記コマンドを使えるようにインストールしてください
    • openssl
    • gzip
  • bash シェルスクリプト
  • 結果

まとめ

各URLに同じパラメータがある事を知られても問題がなかったので圧縮率を優先しました。同一リクエスト内でIVを固定した事により暗号化の強度が下がる懸念があります。パラメータ数に制約が無いなら個別に暗号化した方が安全です。