亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

IntMain / 2494人閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

先說(shuō)下服務(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ì)算出來(lái)用于生產(chǎn)環(huán)境了。

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

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

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

  // 這就是上圖中的第三步:客戶端通過(guò)這個(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ì)算過(guò)后的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é)果你們感受一下:

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

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

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

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

第二個(gè)問(wèn)題就是一般客戶端登陸的用戶都有自己的token或uid之類(lèi)的,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)證一下是否過(guò)期,如果過(guò)期了就重新走一遍前面的協(xié)商流程

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

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