Skip to content

Instantly share code, notes, and snippets.

@Nyoho
Created August 1, 2018 22:36
Show Gist options
  • Save Nyoho/840f216fcf32bd33ff473eae0506db61 to your computer and use it in GitHub Desktop.
Save Nyoho/840f216fcf32bd33ff473eae0506db61 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = next_prime(3291)\n",
"q = next_prime(10000)\n",
"n = p*q\n",
"e = 11\n",
"gcd(e, euler_phi(n))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11999923"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"_, d, _ = xgcd(e, euler_phi(n))\n",
"d"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 確かめ\n",
"e * d % euler_phi(n)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[11, 33013093]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 公開鍵\n",
"[e,n]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[11999923, 33013093]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 秘密鍵\n",
"[d, n]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8355399"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 暗号化\n",
"x = 129487\n",
"y = x^e % n\n",
"y"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"129487"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 復号\n",
"y^d % n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$e$ が大きいとき、$x^e$ (mod $n$) は、 `power_mod` という関数を使わないときつい。\n",
"\n",
"`power_mod(x, e, n)` で $x^e$ % $n$ を「賢く」やってくれる。"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8355399"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_mod(x,e,n)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "SageMath 8.2",
"language": "",
"name": "sage-8.2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.14"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment