Code Monkey home page Code Monkey logo

mandihe's Introduction

mandihe

手動で鍵交換を支援する

これは何?

「パスワードは次のメールでお送りします」をやめるためのツール。

使い方

  1. mandihe の URL から HTML を取得
  2. 取得した HTML を Google Chrome, Firefox などで開く
  3. 「自分の公開鍵」(以下、公開鍵A)を得る。
  4. 以下の作業をパートナーに要求する
    a. mandihe の URL から HTML を取得してください。
    b. 取得した HTML を Google Chrome, Firefox などで開いてください。
    c. 公開鍵Aを「パートナーの公開鍵」欄に貼り付けたうえ「パスワードを生成する」ボタンを押してください。
    d. 「自分の公開鍵」の中身と「ダイジェスト」をお送りください(パスワードは送らなでください)
  5. 手元のブラウザの「パートナーの公開鍵」に送ってもらった公開鍵を貼り付け、「パスワードを生成する」ボタンを押す。
  6. 手元のダイジェストが送っていただいたものと一致することを確認する。
  7. パートナーのパスワード5個と、手元のパスワード5個は一致している。そしてそれらのパスワードは、通信を傍受している人にも推測できない。

仕組み

  1. 自分とパートナーで、公開鍵と秘密鍵を作るための HTML+JavaScript をつくる。
  2. 公開鍵と秘密鍵を作る。
  3. 公開鍵を交換する。
  4. 自分の秘密鍵+もらった公開鍵 で、パスワードと digest を作る。

1. 自分とパートナーで、公開鍵と秘密鍵を作るための HTML+JavaScript をつくる。

作った公開鍵と秘密鍵は、ブラウザの localStorage に保存される。

しかし、 localStorage に平文で保存するのは危険なので、 AES-CTR で暗号化する。

暗号化するには鍵が要る。

その鍵を保管する場所として、JavaScript のソースコードを選んだ。

鍵は「自分とパートナーで、公開鍵と秘密鍵を作るための HTML+JavaScript をつくる ための HTML」にアクセスするたびに安全な乱数( crypto.getRandomValues )で作られる。

鍵の生成と生成された鍵を含む HTML の保存はローカル環境で行われる。通信は行われないので、傍受はできない。

2. 公開鍵と秘密鍵を作る。

鍵は、 crypto.subtle.generateKey で作る。アルゴリズムは EDCHP-521

作った鍵は 前述の通り AES-CTR で暗号化し、 localStorage に保管する。

3. 公開鍵を交換する。

交換する鍵は公開鍵なので、メールでも Twitter でもよい。

4. 自分の秘密鍵+もらった公開鍵 で、パスワードと digest を作る。

crypto.subtle.deriveBits で 528ビット作る。(以下、共有ビット列と呼ぶ)

ダイジェスト

共有ビット列 を SHA-256 でハッシュする。

得られたバイト列を 16bitずつ区切る。この先頭 4件 がダイジェスト。

n番目の パスワード

共有ビット列 の先頭に n のバイトを追加した 536bit を SHA-256 でハッシュしてダイジェストを得る。

得たダイジェストを 32bit 区切りにして、先頭4件を得る。

各32bitを5文字の文字列に変換(使う文字はほとんどすべての英字大文字小文字数字)してつなげると 20文字のパスワードになる。

mandihe's People

Contributors

nabetani avatar

Watchers

 avatar

mandihe's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.