BlogKLabは、多くのスマートフォン向けゲームを開発・提供しています。スマートフォン向けゲームの開発と運用は、Webソーシャルゲームと比べて格段に複雑で、またコンシューマゲーム開発とも異なったノウハウが求められる領域もあります。このブログでは、KLabのゲーム開発・運用の中で培われた様々な技術や挑戦とそのノウハウについて、広く紹介していきます。CIはよく知られたCIサービスの一つです。読者の方々の中にも、個人的なプロジェクトのCIに利用している人は多いのではないでしょうか。中に秘密情報を暗号化して記述できることはあまり知られていないかもしれません。中に記述するような仕組みになっています。CI側で復号されてCIプロセス中で利用することができます。今回指摘する内容は、この暗号の強度が多くのプロジェクトにおいて不足しているのではないかという点です。1024bit鍵による暗号化が利用されているのです。CIの暗号化の仕組みを簡単に説明した上で、どういうときに危険性があるかの詳細と鍵ペア再生成の方法を紹介します。コマンドを用いた暗号化について簡単に紹介します。CIのAPIを叩いて色々とよしなにやってくれる便利コマンドです。中に記述することができます。CI連携しているGitHubプロジェクト直下のディレクトリで下記コマンドを実行してみましょう。書いたのと同じ意味になります。この仕組みにより、APIトークンやメールアドレスなどをYAML中に記述して外部サービスとの連携に使うことができます。コマンドの中身を見ると、その正体がRSAを利用した公開鍵暗号であるとわかります。CIが秘密鍵で復号するような仕組みになっています。CIだけが持っています。CIだけが復号できるというわけです。言い換えると、この暗号化を信用するためのポイントは2点だと言えます。CIが秘密鍵や復号済みデータを流出させるようなことが無い公開鍵への攻撃により秘密鍵を求められるようなことが無いこれさえ守られていれば、暗号化された情報は安全だと言えるでしょう。平文で書いたのと同じということになりかねません。本当に大丈夫なのでしょうか?実は2012年に少数のプロジェクトで1の問題が発生したことがあるようですが、今後は安全だと仮定するしかないでしょう。今回は2の問題について議論していきます。今回指摘したいのは、RSA公開鍵への攻撃の可能性についてです。CIの公開鍵にアクセスしてみましょう。いうのがユーザー名/リポジトリ名になっています。KEY-----$ところで、この公開鍵は短そうに見えますよね。実はこれが1024bit鍵です。1024bit鍵の素因数分解は現代のスパコンでもかなり手強い計算ではありますが、コンピュータの性能向上により5年後なり10年後なりには現実的に攻撃可能になると考えられています。「暗号の2010年問題」の頃に2048bit以上の鍵への移行が叫ばれたことを考えても、1024bit鍵の寿命が近いのは間違いないと言えるでしょう。ちなみに、鍵ペアが1024bitになっているのは一定以上古いプロジェクトだけです。最近のプロジェクトでは4096bit鍵が利用されていますので、今後プロジェクトを作る分にはこの問題はありません。正確な時期はわかりませんが、2015年4月頃に4096bit鍵に切り替わったように推測しています。ご自分のプロジェクトの鍵ペアの鍵長を確認したい場合、上のようにAPIから公開鍵を確認すればわかります。公開鍵がASCIIで210文字くらいだったら1024bit鍵、730文字くらいだったら4096bit鍵ということになります。結果の長さも鍵長と同じサイズになるので、そこからも判断できます。鍵ペアを再生成する手順もしかすると短い鍵ペアを使っているプロジェクトが見つかったかもしれませんね。しても、鍵ペアを再生成するAPIが提供されていますので安心してください。ちなみに、現時点ではAPIを直接叩く以外の方法は提供されていません。鍵ペアの再生成APIを利用するにはAPIトークンが必要です。コマンドを実行することで取得できます。ヘッダから送信すればAPIの認証が成功します。ユーザー名およびプロジェクト名です。https://api.travis-ci.org/repos/hnw/php-timecop/keyAPI呼び出しに成功すると新たな鍵ペアが生成されます。消してはいけません)。元の鍵ペアが1024bitだった場合でも再生成すれば4096bit鍵になりますので、あと20年くらいは安心だといえそうです。鍵ペアを再生成した場合は改めて秘密情報の暗号化を行う必要があります。古い暗号文を遠い将来第三者が解読する可能性まで考えれば、暗号化対象のパスワード変更やAPIトークン再発行なども合わせて行うのが良いでしょう。CI上に作られたプロジェクトが該当API経由で鍵ペアの再生成ができる再生成すると4096bit鍵になる本題とはズレますが、RSAを署名ではなく暗号化に使っている事例は比較的珍しい気がするので、その観点でも面白い話題といえるかもしれません。