RSA暗号方式をpythonで実装してみる

琉球大学工学科知能情報コースAdventCalender2018の8日目の記事です。 こんにちは、kagariです! 私自身2回目の記事でAdvent Calendarに登録するなんて思ってもみませんでしたw 記事の内容を「RSA暗号方式をpythonで実装する」って決めた理由としては、最近授業で習ったからというだけの理由です。 何か至らない点があっても暖かい目で見守ってくださいm(__)m RSA暗号方式ってなに? RSA暗号とは、桁数が大きい合成数の素因数分解問題が困難であることを安全性の根拠とした公開鍵暗号の一つである。(wikiより) うん、完全に理解した(多分) 要するに素数を使った暗号方式だね! 今回はこれをpythonで実装していく アルゴリズム 鍵の生成 まずは公開鍵の生成を行う。 2つの素数をp,qとし、n=p×qとm=(p-1)×(q-1) を求める。 さらに、nとmとが互いに素である数$e$を定める。 この(e,n)が公開鍵である。 次に、秘密鍵の生成を行う。 ed mod ((p-1)(q-1)) = 1となるようなdを見つける。 このdが秘密鍵である。 公開鍵と秘密鍵を生成したらp,qは用済みなのでしっかり破棄しましょう。 暗号化と複合 暗号化 平文(M)を暗号化すると、暗号文(C)は C=M^e mod nとなる。 これで暗号化を行う。 複合 複合は、暗号文(C)を以下のようにして平文(M)にすることができる。 M=C^d mod n これで複合を行う。 実際に実装していく 早速、どうやってpとqを生成すればいいかわからないという問題にぶつかった。 が、今回は全然セキュリティとかは考えていないので、手打ちにすることにする() 使用するライブラリはmathだけ! import math とりあえず、公開鍵と秘密鍵を生成する関数を作ってみる。 まずは公開鍵から def get_public_number(p, q): n = p*q # mと互いに素な数eを見つける m = (p-1)*(q-1) e = 2 while math.gcd(m, e) != 1: e += 1 return e, n 次に、秘密鍵を生成する関数を用意...

December 8, 2018

Octave GUIのインストール方法

octave GUIと検索してもGUIソフトの入れ方が古いようで何度もhomebrewに怒られてしましました。 基本的に参考にしたのは以下の記事です。 macにoctaveのインストール 書き中~ Mac OS X に GNU Octave をインストールする 上記のやり方だと、homebrewにhomebrew/scienceというtapは空と言われます。 $ brew tap homebrew/science Error: homebrew/science was deprecated. This tap is now empty as all its formulae were migrated 素直に公式のページを見るとインストール方法が載っていたので、公式にしたがってインストールを進めます。 今回は、homebrewを使ってインストールを行いました。 環境 macOS Mojave 10.14.2 homebrew 2.0.1 インストール手順 $ brew tap octave-app/octave-app $ brew cask install octave-app 以上。 ただ、GUIのOctaveを使ってみると、日本語が文字化けしており、未だ解決できていません… フォント変えたりしたけど解決策がわからない。 解決できたら追記する予定です。...

October 1, 2018