成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

我發(fā)誓這真的是最后一篇關(guān)于ECDH的文兒!(API安全加強(qiáng)篇四)

Barrior / 1540人閱讀

摘要:這種神奇的算法可以讓你服務(wù)器和客戶端在不傳輸該對(duì)稱密鑰的情況下就可以通過心有靈犀地方式各自計(jì)算出一個(gè)對(duì)稱密鑰,而且可以一樣,避免了該密鑰在網(wǎng)絡(luò)上流通,而且你可以隨意更換,過期時(shí)間定為分鐘,可謂是狠毒至極我們引入就是為了解決上面的問題。

首先是前段時(shí)間我在公眾號(hào)里被人批(dui)評(píng)(gang)了,大概意思就是:你別老整那ECDH又是橢圓又是素?cái)?shù)啥的,你就說這玩意實(shí)際項(xiàng)目中怎么用就完了,我們不想聽那些,那些我們都懂都精通,而且你還太監(jiān)了,你自己看看是不是太監(jiān)了,ECDH寫到上一篇明顯還沒完,結(jié)果到現(xiàn)在了還沒下文,你自己說是不是太監(jiān)了,你自己說。

其次是實(shí)際上本篇內(nèi)容實(shí)際上和ECDH沒有半毛錢關(guān)系,通篇都是DH(少了EC兩個(gè)字母),不過在項(xiàng)目中實(shí)際應(yīng)用的業(yè)務(wù)邏輯寫法、道理都是一樣曬兒的。你現(xiàn)在可以暫時(shí)認(rèn)為DH就是ECDH的“ 少了兩個(gè)字母版本 ”。用DH的最主要原因是啥呢,因?yàn)闀r(shí)間有限,我優(yōu)先寫了DH的常用語言庫文件,目前可用,ECDH的一根毛都沒有寫,所以只能用DH演示。

最后是再次強(qiáng)調(diào)一遍,作為一篇正經(jīng)的文章,我需要再次科普一下DH是啥意思。

很多都以為DH是Daemon Hunter(惡魔獵手)的簡(jiǎn)稱,然而并不是。Daemon Hunter是真實(shí)名稱叫做伊利丹,是個(gè)瞎子同時(shí)又是法瑪麗奧(就是老鹿)的兄dei。他暗戀白虎(就是那種真的白虎)泰蘭德,然而泰蘭德卻嫁給了老鹿,事情大概就是這么一回事。

在我們這里DH則是Diffie-Hellman的簡(jiǎn)稱,二位大爺?shù)恼掌乙郧百N過,現(xiàn)在不得不再貼一遍:

上圖告訴我們頭發(fā)長短與職業(yè)無關(guān),douyin上那些自以為get到程序員梗的短視頻真的是LOWB到一塌糊涂。

在正式開始前之前,我還是要說明一下用DH的初衷是什么或者說這個(gè)東西是來解決什么問題的。接著上篇的故事(點(diǎn)擊這里)說:

你老板說項(xiàng)目非常牛逼,數(shù)據(jù)要加密,用牛逼的加密算法

你就用RSA非對(duì)稱加密開發(fā)測(cè)試操作猛如虎

然后,一上線:CPU炸了,成績(jī)1-5

然后你找老板審批升級(jí)服務(wù)器費(fèi)用,老板給了你300塊并讓你放心花大膽花

你首先把RSA下線了,然后偷偷換成了AES對(duì)稱加密,CPU不炸了

然后三百塊偷偷放到了自己腰包里

但是AES的對(duì)稱密鑰你寫死到客戶端,被逆向就完了;如果通過服務(wù)器下發(fā),聽起來更加扯淡

想了想,你拿著三百塊錢組了個(gè)局兒,你帶著錢,我?guī)е愋瘢馅w帶著柱子,再加上大彪,正好六人局

局上我向你透露出一種方案:將AES對(duì)稱密鑰通過非對(duì)稱方式協(xié)商出來。DH這種神奇的算法可以讓你服務(wù)器和客戶端在不傳輸該對(duì)稱密鑰的情況下就可以通過心有靈犀地方式各自計(jì)算出一個(gè)對(duì)稱密鑰,而且可以一樣,避免了該密鑰在網(wǎng)絡(luò)上流通,而且你可以隨意更換,過期時(shí)間定為1分鐘,可謂是狠毒至極!

我們引入DH就是為了解決上面的問題。然而,DH或ECDH并不能解決中間人攻擊問題,這個(gè)要搞明白了。

所以,在正式開始之前,我必須先安利我和東北大嫖客還有巨蛀以及阿尼特寫的DH庫,github鏈接是這個(gè),下面我將利用這些DH庫們進(jìn)行demo演示。

https://github.com/ti-dh
(明眼人已經(jīng)看出來我是來騙star的)

目前這個(gè)庫提供了純PHP、C實(shí)現(xiàn)的PHP擴(kuò)展、Java版,列個(gè)表格吧:

先說下服務(wù)端和客戶端進(jìn)行協(xié)商地整體流程,非常非常簡(jiǎn)單:

整個(gè)協(xié)商流程中,只有第二步和第三步會(huì)發(fā)生數(shù)據(jù)交互。第二步是API下發(fā)p、g、server-num給客戶端;第三步是客戶端向API提交client-num數(shù)據(jù);最后一步,對(duì)稱加解密用的key就已經(jīng)計(jì)算出來用于生產(chǎn)環(huán)境了。

下面我用世界上最好的語言演示一下如何使用這個(gè)鬼東西,客戶端我們用什么演示呢?客戶端也依然使用世界上最好的語言來演示。首先,你們把上面github里的庫文件集成到你們API里,我這里集成完畢后代碼如下:

API demo code:
dh = new Dh();
  }

  // 這就是上圖中的第二步:客戶端訪問這個(gè)API獲取g p 和 server-num
  public function getdhbasedataAction() {
    $ret = $this->dh->getdhbasedata();
    echo json_encode( $ret );
  }

  // 這就是上圖中的第三步:客戶端通過這個(gè)api提交client-num參數(shù)
  public function postdhclientdataAction() {
    if ( $this->getRequest()->isPost() ) {
      if ( empty( $_POST["client_number"] ) || !is_numeric( $_POST["client_number"] ) ) {
        exit( json_encode( array(
          "code"    => -1,
          "message" => "wrong parameters",
        ) ) );
      }
      $ret = $this->dh->postdhclientdata( $_POST );
      echo json_encode( array(
        "key" => $ret,
      ) );
    }
  }

}
Client demo code:
get( "https://xxxx.ooo/dh/getdhbasedata" );
$ret = json_decode( $ret, true );
$p = $ret["p"];
$g = $ret["g"];
$server_number = $ret["server_number"];
// 2、第二步,根據(jù)服務(wù)器獲取到的數(shù)據(jù)計(jì)算出client-number
$process_client_number = gmp_powm( $g, $client_number, $p );
// 3、第三步,將計(jì)算過后的client-number發(fā)送給服務(wù)器
// 那個(gè)demo里已經(jīng)有完美的演示了,多看代碼
$ret = $curl->post( "https://xxxx.ooo/dh/postdhclientdata", array(
  "client_number" => gmp_strval( $process_client_number ),
) );
$ret = json_decode( $ret, true );
// 4、第四步,根據(jù)server-number,client-number和p 計(jì)算出公共密鑰K
$key = gmp_powm( $server_number, $client_number, $p );
echo PHP_EOL."DH非對(duì)稱密鑰產(chǎn)生交換:".PHP_EOL;
echo "client計(jì)算出的public key : ".$key.PHP_EOL;
echo "server計(jì)算出的public key : ".$ret["key"].PHP_EOL.PHP_EOL;

客戶端文件保存client.php,然后php client.php執(zhí)行一下,結(jié)果你們感受一下:

一樣有沒有?!計(jì)算出來的都一樣,有沒有??。?/p>

上圖中那么一坨長的不能整的讓人看了就覺得惡心嘔吐的數(shù)字就是API和客戶端分別計(jì)算出來的對(duì)稱加解密的密鑰了,請(qǐng)注意實(shí)際使用過程中,服務(wù)器千萬不要把這個(gè)數(shù)據(jù)返回給客戶端,demo里這么做就是為了演示而已,用的時(shí)候自己也需要?jiǎng)觿?dòng)腦子的。

然而,事情往往不會(huì)說就是這么簡(jiǎn)單就可以了,如果在生產(chǎn)環(huán)境使用,還是需要繼續(xù)完善一些細(xì)節(jié)的。

第一個(gè)問題就是有些想的比較多的寶貝兒們會(huì)不同的兩個(gè)客戶端計(jì)算出來的key會(huì)不會(huì)一樣?可能性非常非常非常小

第二個(gè)問題就是一般客戶端登陸的用戶都有自己的token或uid之類的,API這里在與一個(gè)客戶端協(xié)商出一個(gè)key后可以以 “ token:key ” 格式把key存儲(chǔ)到redis中,然后給一個(gè)有效時(shí)間比如30分鐘;客戶端也將key保存到手機(jī)內(nèi)存中設(shè)置一個(gè)30分鐘有效期。每次使用key進(jìn)行加解密前都驗(yàn)證一下是否過期,如果過期了就重新走一遍前面的協(xié)商流程

我發(fā)誓,這是關(guān)于DH或ECDH的最后一篇文章了,以后我再也不會(huì)寫任何與這兩個(gè)英文縮寫相關(guān)的東西了,我說都是真的,我保證說到做到。

歡迎來公眾號(hào)懟我、杠我:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11482.html

相關(guān)文章

  • 發(fā)誓真的最后一篇關(guān)于ECDH文兒?。?em>API安全加強(qiáng)篇四

    摘要:這種神奇的算法可以讓你服務(wù)器和客戶端在不傳輸該對(duì)稱密鑰的情況下就可以通過心有靈犀地方式各自計(jì)算出一個(gè)對(duì)稱密鑰,而且可以一樣,避免了該密鑰在網(wǎng)絡(luò)上流通,而且你可以隨意更換,過期時(shí)間定為分鐘,可謂是狠毒至極我們引入就是為了解決上面的問題。 首先是前段時(shí)間我在公眾號(hào)里被人批(dui)評(píng)(gang)了,大概意思就是:你別老整那ECDH又是橢圓又是素?cái)?shù)啥的,你就說這玩意實(shí)際項(xiàng)目中怎么用就完了,我...

    IntMain 評(píng)論0 收藏0
  • 關(guān)于PHP加解密之終扯到ECDH了(API安全加強(qiáng)篇三)

    摘要:很明顯,非對(duì)稱加密的極大的消耗成了一種瓶頸。其中,利用非對(duì)稱加密的方案大概就是我前面說的那樣,偽代碼已經(jīng)展示過了。 其實(shí),前面兩篇翻來覆去只為叨逼叨叨逼叨兩件事情: 對(duì)稱加解密,典型算法有AES、DES、3DES等等 非對(duì)稱加解密,典型的算法有RSA、DSA、ECDH等等 但是,我知道大家最討厭在看這種文章的時(shí)候冒出來的一坨橢圓曲線、素?cái)?shù)、質(zhì)數(shù)等等這樣的玩意,反正看也看不懂,理解也...

    lcodecorex 評(píng)論0 收藏0
  • 關(guān)于PHP加解密的懶漢入門篇(API安全加強(qiáng)篇一)

    摘要:由于密鑰被暴露了,所以必須換新的密鑰,元首這會(huì)兒只能走途徑告訴古德里安新的密鑰,這會(huì)兒逗逼的事情來了,如何對(duì)密鑰進(jìn)行加密。但是,有一點(diǎn)是值得說明,那就是無論是對(duì)稱加密還是非對(duì)稱加密,都頂不住用機(jī)器是強(qiáng)行暴力猜解私鑰。 懶漢 入門 這兩點(diǎn)就足以說明這篇文章不想要著有什么高端大氣的技術(shù)內(nèi)容,我跟你講,全是水。不可能有什么質(zhì)數(shù)素?cái)?shù)、橢圓曲線加密、迪菲-赫爾曼什么的,不可能有的。 首先我不...

    waterc 評(píng)論0 收藏0
  • 關(guān)于PHP加解密的青年抬高篇(API安全加強(qiáng)篇二)

    摘要:實(shí)際上這一篇和上一篇均可以看作是關(guān)于加解密的懶漢入門篇安全加強(qiáng)篇一的后續(xù),只不過側(cè)重點(diǎn)在于安全上?;氐缴掀Y(jié)果提到的問題,就是對(duì)稱加密的安全性要人命,非對(duì)稱加密的性能非常要人命。元首作為高智商罪犯,這種低級(jí)錯(cuò)誤是不可能犯的。 為什么標(biāo)題總是要帶上API安全關(guān)鍵字呢?因?yàn)槲蚁胛覙芬狻?實(shí)際上這一篇和上一篇均可以看作是《關(guān)于PHP加解密的懶漢入門篇(API安全加強(qiáng)篇一)》》)的后續(xù),只不過...

    wujl596 評(píng)論0 收藏0
  • 關(guān)于PHP加解密的青年抬高篇(API安全加強(qiáng)篇二)

    摘要:實(shí)際上這一篇和上一篇均可以看作是關(guān)于加解密的懶漢入門篇安全加強(qiáng)篇一的后續(xù),只不過側(cè)重點(diǎn)在于安全上?;氐缴掀Y(jié)果提到的問題,就是對(duì)稱加密的安全性要人命,非對(duì)稱加密的性能非常要人命。元首作為高智商罪犯,這種低級(jí)錯(cuò)誤是不可能犯的。 為什么標(biāo)題總是要帶上API安全關(guān)鍵字呢?因?yàn)槲蚁胛覙芬狻?實(shí)際上這一篇和上一篇均可以看作是《關(guān)于PHP加解密的懶漢入門篇(API安全加強(qiáng)篇一)》》)的后續(xù),只不過...

    付倫 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<