OpenSSL 3.xではBlowfishという暗号アルゴリズムがdeprecatedされ、デフォルトではロードできなくなった。mikutterはBlowfishでsecretを暗号化しているためそういう環境で死ぬ。
バグ #1585: OpenSSL 3.x 環境 (ubuntu 22.04 等) で mikutter が起動しない - mikutter - やること
deprecatedなものをビルドしないというオプションを明示的に指定しない限り、Blowfishもlegacy providerとしてロードすることはできる。しかし現状のRubyはlegacy providerをサポートしていない。ちょっと待てばlegacy providerサポートが入りはする。
https://github.com/ruby/openssl/pull/635
とはいえ時間がかかるし、legacy providerなしでOpenSSLをビルドしているような環境でどうなん?という問題もある。一回マイグレーションさえすればもっとロバストな暗号化アルゴリズムに変換できるので、自力でdecryptを再実装したい。
mikutterは Plugin::World::Keep
で以下のようにしてsecretを暗号化している。
def encrypt(str)
cipher = OpenSSL::Cipher.new('bf-ecb').encrypt
cipher.key_len = ACCOUNT_CRYPT_KEY_LEN
cipher.key = key
cipher.update(str) << cipher.final end
/plugin/world/keep.rb - mikutter - やること
OpenSSL::Cipher
はRubyにバンドルされている。
ドキュメント:
class OpenSSL::Cipher (Ruby 3.2 リファレンスマニュアル)
実装:
https://github.com/ruby/openssl
OpenSSLの気持ちは全然知らないので、とりあえず雰囲気を掴むためにOpenSSLでBlowfishがどういう実装をされているか見てみる。