G-StorageにOAuth認証(RSA-SHA1方式)をつけてみた

前回出来なかったって書いたけど、tlslite使って出来た。
これでWSSE、OAuth(RSA-SHA1)、OAuth(HMAC-SHA1)の認証が出来るようになった。
 
G-Storage
http://g-storage.appspot.com/
 

スクリーンショット

公開鍵登録の部分。

 

RSA

普段何気なく使ってるRSAだけど、RSAとは一体何なのか気になって調べてみた。
 

RSAの安全性

2つの素数を書けた値を、因数分解して2つの素数に戻すのに時間がかかるから安全、という事らしい。
 

RSAで出来る事

・暗号化 (公開鍵で暗号化 => 秘密鍵で復号化)
だれでも見れる公開鍵で暗号化して、復号化は秘密鍵を持ってる人しか出来ない。
 
・署名 (秘密鍵で署名 => 公開鍵で検証)
秘密鍵を持ってる人が本人とする。
OAuthで使われてるのはこっち。
 

RSAの計算

RSAを使って、やたら面白い事をやってる方がいた。
 
RSA暗号で「ふっかつのじゅもん」を作る(1) - Pashango’s Blog
http://d.hatena.ne.jp/pashango_p/20090706/1246897957
 
Pythonは関数が便利だったりintが勝手にfloatにならなかったり。
挙動を1番知ってるPHPに書き換えてみた。

<?php
// 最大公約数を求める
function gcd($a, $b)
{
	while ($b!=0) {
		list($a, $b) = array($b, $a % $b);
	}
	return $a;
}

// 最小公倍数を求める
function lcm($a, $b)
{
	return $a * $b / gcd($a, $b);
}

// 拡張ユークリッド互除法
function gcd2($a, $b)
{
	if ($b==0) {
		$u = 1;
		$v = 0;
	} else {
		$q = (int)($a / $b);
		$r = $a % $b;
		list($u0, $v0) = gcd2($b, $r);
		$u = $v0;
		$v = $u0 - $q * $v0;
	}
	return array($u, $v);
}

// べき剰余
function pow2($b, $e, $m)
{
	$result = 1;
	while (0<$e) {
		if (($e & 1) == 1) {
			$result = ($result * $b) % $m;
		}
		$e >>= 1;
		$b = ($b * $b) % $m;
	}
	return $result;
}