Pythonで素数・RSA暗号と公開鍵認証の仕組みを分かりやすく理解する

素数とは何か

素数とは素因数分解した際に1とその数でしか割れない数のことをさす。

f:id:oruka199665:20190528102137p:plain

Pythonで素因数分解をやってみる

import sympy as sym
sym.factorint(113)

#実行結果
{113: 1}


import sympy as sym
sym.factorint(200)

#<実行結果>
{2: 3, 5: 2}

素数は暗号の元

現在の暗号の基本は素数同士の掛け算にあります。例えば素数である113×41は4633と簡単に計算することができますが、4633を113×41と推測するのは素数を総当たりするしかないため、非常に手間がかかります。

もちろん実際の暗号に使われている素数は100桁×100桁など非常に大きく高性能になった現代のコンピューターですら途方もない時間が掛かります。

暗号の基本的な仕組みはコレでコンピューターで頑張れば理論上解けないことはないけど、計算するのに数百年近くため、実質的に解読不可能という感じです。

インターネットの通信においてこの素数を性質を利用しているのが、「RSA暗号」です。RSA暗号では「暗号化するためのカギ(公開鍵)」「暗号を解くためのカギ(秘密鍵)」の2つのカギをペアで使用する暗号化方式です。

RSA暗号における暗号化のためのカギは素数同士を掛け合わせた値になります。そして、その公開鍵の値のもとになった2つの素数が秘密鍵になります。

引用:http://electronic-journal.seesaa.net/article/455358651.html

通信の大まかな流れとしては、まず公開鍵を公開して自分あてのメッセージは公開鍵を使用して暗号化して相手に送ります。そして、受け取った側は公開鍵のもとになった2つの素数である秘密鍵を使って暗号化されたデータを解読します。

これならばもし途中で悪意のある第3者に中身を見られても暗号化されており、しかも暗号は秘密鍵がないと事実上解読できないので、情報が洩れる心配はありません。この公開鍵と秘密鍵を使った暗号化の仕組みはインターネット上で『電子署名』という形で使用されています。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で



「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」

「エンジニアとして若いうちから高収入を得たい」



という強い気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->