gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

パスワードの「hash化」の変わりに「暗号化」は使えないかなぁ?

先に結論。「面倒くさい」と思われます(笑


以下、思考過程を。


ものすごく大まかには「id + デリミタ + パスワード、の文字列を公開鍵暗号によって暗号化 & 秘密鍵は[完全に削除する | まったく物理的にも別な場所に保存しておく]」。
基本的には「id + デリミタ + パスワード、の文字列を公開鍵暗号によって暗号化」の部分が、hashと多分大体同じような効果を表すと予測。具体的には「人間が見ても元文字列がわからん程度にぐちゃぐちゃになっている」という条件を満たすと思われ。
hashの「非可逆性」については。「公開鍵暗号であること+秘密鍵をぽいぽいすること」で大体同じ程度の状況が作成可能(厳密には解読可能だけど…それについては「十分な暗号強度がある」ことで等価とみなす、ってあたりでごかんべんを)。


そうすると後は、「id + デリミタ + パスワード、の文字列を公開鍵暗号によって暗号化」を複数回やることでストレッチすればよいか、と。具体的には「パスワード」のところが「暗号文」になる、と思われ。
一応、暗号文の長さで「ある程度、元文字列の長さの予測」が出来るんだけど、その辺は「一定length以下なら、適当にパディングする」とかいうギミックでバミることが出来るので、無問題。


っちゅわけで…大体「hashと同等程度と思われる」機構は組み上げられるのですが…いかんせん、文字列がすんげぇ長くなりそうだし(ストレッチのたんびにIV入るしなぁ…二回目以降はなしでもいい気もするが)。
同等なら、「素直にhashでストレッチ」したほうが、間違いなく、楽(笑


まぁ一応「秘密鍵の保存に気をつける」前提で「本当にどうしようもなくいざとなったら暗号文字列の復元が可能」ってところが、状況と要求によっては「利点となる」可能性が、まったく0ではないと考えられるので。
そ〜ゆ〜「極めて稀なシチュエーション」においては、もしかすると、役に立つ、かも、しれない。


というわけで。
限りなく駄文なわけなのですが、せっかくなので、memo。