天天看點

mangos(二)認證登入基本流程

一、公鑰基本概念

  1. 舉個簡單的例子就很清楚了,就好象例子中的任何人都知道用錢币(公鑰)鎖上存物箱,但仍然打不開存物箱。隻有擁有鑰匙或寫有号碼的紙條(私鑰)的人才能打開存物箱。

    上面的例子還有點問題,實際中私匙一般隻有通信的解密方才知道,加密的人都不知道。

    在舉個例子:

    (2^3) mod 11 =8

    (8^7) mod 11= 2

    在這裡2是明文8是密文。

    加密密鑰是3解密鑰匙是7,加密和減密鑰匙不一樣。

    這裡2可以是使用者密碼,3為公鑰,7是伺服器端的保留的私鑰(十分重要)。 這樣

    假設是A,和B

    隻要滿足(A*B+1) mod 11 =0 就可以了。

    這是簡單的例子。如果把11變的很大。

    知道B是算不出A來的。

    簡單說,就是這個道理

  2. 公匙的應用不僅僅是加密,還可以是簽名。需要簽名的人先把自己個公司告訴别人,發資訊的時候用自己的私匙加密(别人不知道,否則可以用你的名義發各種消息)。這條資訊就有了你自己的“簽名”。因為隻有你的公匙能夠解密該私匙,而你的公匙早就公布過了。
  3. 相對于對稱加密,不對稱加密往往需要運算量大。

二、mangos登入流程

  1. SRP算法

    登入驗證使用了這算法,Secure Remote Password(安全遠端密碼),它是一個開放源代碼認證協定。這個算法比較複雜,有點類似于公匙,伺服器發送給用戶端幾個參數,有公匙,還有随機數(這個特别重要),和其他參數。有了随機數那麼字典破解的方法難度就幾何級别增長了。用戶端根據發送過來的一堆參數,和自己發送的明文,運算出一個值,發送給伺服器,伺服器根據私匙,自己發的随機數和一些亂起八糟的參數和資料庫中已經儲存的明文(或明文的等價),也計算一個值,比較是否相等。如果相等就算驗證成功。同時運算過程中雙發都産生一個相等的值K。這個K後來用作認證後的對稱加密。

  2. 大緻看了下基本流程,配置設定了專門的認證登入伺服器,登入伺服器使用公鑰算法驗證client的合法性,計算sessionkey并儲存在MySQL裡,以備後面的邏輯伺服器使用。驗證通過後,把邏輯伺服器清單發給client。然後client請求特定的邏輯伺服器,伺服器發送消息再次請求身份認證使用對稱加密,計算sha1值。(帶着一個随機數,一個第一次生成的SessionK,還一些其他算法參數)注意這裡計算sha1加密結果沒有直接使用明文的密碼,而是用了上一次公匙驗證過程中生成的一個K。然後後面的通信都是使用K進行對稱加密通信。

    代碼裡主要都是加密的邏輯運算就沒有在分析。

參考:

http://www.cnblogs.com/ychellboy/archive/2011/10/30/2229509.html

http://srp.stanford.edu/design.html