<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 204312
    • 排名 - 283

    最新評論

    前些時候,大概7月份看了些SSL協議的東西,對前人非常的佩服。把非對稱加密的安全性和對稱加密的快速性結合起來使用,保留了各自的長處。整個數據傳輸過程中,通過非對稱加密在不安全的區(qū)域安全的傳輸了用于對稱加密的密鑰,實在是創(chuàng)造性的思維。

    前天晚上洗澡的時候,突然有了幾個新的想法,加上以前的一點發(fā)現,就有了這篇文章和幾行代碼。現在覺得非對稱加密還真的很有意思啊,洗澡也很有意思,難怪阿基米德洗澡能夠發(fā)現浮力定理。我們不夠強大,可能是因為洗澡不夠吧。

    一. RSA替換HTTPS保證安全傳輸敏感數據

    目前大多數的web應用在注冊或者登錄的時候,或者其他任何涉及到用戶帳戶,密碼,以及信用卡號等等敏感數據傳輸的時候,一般都毫不猶豫的采用了 HTTPS加密傳輸的方式來進行。比如Gmail,Yahoo Mail,Live Mail等國際性的郵箱,都是用了這種方式。確實,使用HTTPS是一種比較安全的方法,但是這樣做從成本角度來說,并不是最優(yōu)的。

    使用1024位密鑰的HTTPS傳輸,在相同硬件配置的情況下,性能基本上要損失掉30%左右。大量的CPU時間花費到了對數據的加密解密以及證 書認證,傳輸,SSL握手等方面。對于千萬用戶級別的應用這些損失是難以忽略掉的,因此大公司一般都會購買SSL硬件加密卡,使用硬件進行加密解密。

    鑒于RSA等非對稱加密算法的public key是可以公開的,因此可以使用這種方式來傳輸數據,在某些場合取代昂貴的HTTPS傳輸。比如在郵箱的登錄入口,用戶點擊提交按鈕的時候,在本地使用 JS代碼將用戶名和密碼進行RSA加密。雖然public key明文存在于JS代碼中,客戶端可見,但是僅僅具備public key是無法推算出private key的,因此無法對加密后的數據進行捕獲分析,加密后的數據可以安全的通過互聯網傳輸。

    前些時間對國內國外的一些大型網站登錄入口做了些分析,發(fā)現只有tencent的郵箱是使用的這種方式。他們用JS做了一個類,提供RSA加密算法的各種方法,在郵箱登錄表單提交的時候調用加密。JS類的地址為http://mail.qq.com/zh_CN/htmledition2/js/safeauth.js, 有興趣的可以自己去研究。使用這種方式之后,服務端的計算量大大減少,只需要在用戶提交的時候進行一次解密操作就可以了。而且這個解密,可以使用C語言做 成模塊,給前端展現語言調用,提高效率。如果有更高的安全性考慮,可以做一些改進,比如在客戶端提交表單之前,在發(fā)送數據里面加入完整性檢驗等等,自由發(fā) 揮即可。

    二. 獨立的水印系統

    現在的論壇或者blog,都需要使用水印來防范強行破解密碼的攻擊方式,和防范發(fā)帖機器人的破壞。但是很多水印和應用系統結合在一起,不方便擴充和給第三方提供服務。這幾天想到可以使用RSA加密來實現一套獨立的水印算法,并且可以方便的提供給任意的第三方安全使用。

    主要思路是這樣的,首先生成一對公鑰和私鑰。將公鑰發(fā)布給需要使用水印服務的第三方,私鑰保存在水印生成方。在使用方隨機生成一個字符串,隨后使 用水印方提供的public key,使用RSA算法進行加密,將加密后的字符串發(fā)送給生成水印方。生成方使用private key對這個字符串進行解密,畫出圖形,將數據傳輸給水印使用方。雖然加密后的字符串在水印使用方的HTML源代碼中明文可見,但是同上所說的,沒有 private key是無法解密的。對于安全性的一些加強,可以考慮同時在使用方與生成方之間共享一個用于對稱加密的字符串。先對隨機生成的水印數字進行對稱加密,然后 再RSA非對稱加密,這樣可以在萬一丟失private key的情況下,仍然不容易馬上被攻破。

    為了驗證我的這個思路,今天寫了一小段驗證代碼,發(fā)現還是比較好用的。我主要是把Pear里面的RSA類扒出來了,稍微改了一點點,然后做了一套測試系統。簡單的代碼如下,詳細的見附件。

    代碼:

    /*

    Global.php  通用函數,調用RSA類提供加密解密功能。

    云舒 , 2007年10月1日

    */
    function encrypt( $plain_text )
    {
        $public_key = 'YTozOntpOjA7czozMjoiS1vW5NNLH39farB+HPE/U0A1fs1I7ja81GJxGrrjsYEiO2k6MTtzOjM6IgEAASI7aToyO3M6NjoicHVibGljIjt9';
        
        $key = Crypt_RSA_Key::fromString($public_key);
        check_error($key);
        $rsa_obj = new Crypt_RSA;
        check_error($rsa_obj);

        $enc_text = $rsa_obj->encrypt($plain_text, $key);
        check_error($rsa_obj);
        
        return $enc_text;
    }

    function decrypt( $enc_text )
    {
        $private_key = "YTozOntpOjA7czozMjoiS1vW5NNLH39farB+HPE/U0A1fs1I7ja81GJxGrrjsYEiO2k6MTtzOjMyOiIButTavL72eeXVEa8E5WkAJthoHqmHIyo3HblsSJG0aiI7aToyO3M6NzoicHJpdmF0ZSI7fQ==";
        
        $key = Crypt_RSA_Key::fromString($private_key);
        check_error($key);
        $rsa_obj = new Crypt_RSA;
        check_error($rsa_obj);
        $rsa_obj->setParams(array('dec_key' => $key));
        check_error($rsa_obj);

        $number = $rsa_obj->decrypt($enc_text);
        
        return $number;
    }


    代碼:

    /*

    水印需求方,隨機生成字符串,然后加密發(fā)送給水印生成方

    云舒 , 2007年10月1日

    */
    require_once 'Global.php';

    $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
    $str_a = $chars;
    $str_b = $chars;
    $str_c = $chars;
    $str_d = $chars;

    $str = $str_a.$str_b.$str_c.$str_d;
    $enc_data = encrypt( $str );

    echo '<html><head><title>test</title></head><body><img src="CreateImg.php?number=' .rawurlencode( $enc_data ). '" /></body></html>';


    代碼:

    /*

    水印提供方,獲取需求方傳遞過來的參數,解密,畫出圖形

    云舒 , 2007年10月1日

    */
    require_once 'Global.php';

    header('Content-type: image/gif');
    if( isset( $_GET["number"] ) )
    {
        $enc_number = rawurldecode( $_GET["number"] );
    }
    else
    {
        exit;
    }

    $de_number = decrypt( $enc_number );
    $chars = preg_split( '//', $de_number );

    $im = imagecreate(75,30);

    $bg = imagecolorallocate($im, 255, 255, 255);//背景
    $font_color = imagecolorallocate($im, 0, 0, 0);//字

    imagestring($im, mt_rand(5,9), mt_rand(0,5), mt_rand(0,5), $chars[1], $font_color);
    imagestring($im, mt_rand(5,9), mt_rand(15,25), mt_rand(0,5), $chars[2],  $font_color);
    imagestring($im, mt_rand(5,9), mt_rand(30,40), mt_rand(0,5), $chars[3],  $font_color);
    imagestring($im, mt_rand(5,9), mt_rand(45,50), mt_rand(0,5), $chars[4],  $font_color);

    // 隨機點
    for ($i=1; $i<=10; $i++)
    {
        imagestring($im,mt_rand(0,5),mt_rand(-5,63),mt_rand(-5,23),".",imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
    }
        
    imagegif($im);
    imagedestroy ($im);



    三. 防御偽造域的垃圾郵件

    垃圾郵件現在也是網絡上很頭疼的一個問題,使用非對稱算法的簽名功能,可以對偽造域的垃圾郵件進行鑒別,需要郵件接收方服務器的支持。理論不多說 了,直接舉例。假設我是mail.icylife.net域,我給mail.ph4nt0m.org發(fā)郵件。但是有人自己架設了mail服務器,偽裝成webmaster@icylife.netwebmaster@ph4nt0m.org發(fā)郵件,試圖取得他的信任,這種問題如何處理?好辦,使用非對稱加密的簽名驗證功能。

    首先,我在http://mail.icylife.net/publickey.txt存放我的公鑰文件,私鑰自己保存好。然后對郵件服務器進行一些改進,對于本域發(fā)出去的所有郵件,包括郵件正文和接受者一起做一個簽名,把簽名附在郵件中一起發(fā)出去。而mail.ph4nt0m.org域中的郵件服務器在接收郵件時,從http://mail.icylife.net/publickey.txt取得我的公鑰,對簽名進行驗證,如果簽名不對,馬上提示用戶遭受源域名偽造攻擊。對于攻擊者來說,他沒有我的私鑰,是不可能偽造出同樣的簽名的。

    原文地址:http://www.icylife.net/yunshu/show.php?id=471
    posted on 2007-11-25 09:29 matthew 閱讀(360) 評論(0)  編輯  收藏 所屬分類: 網站應用
    主站蜘蛛池模板: 日韩免费a级在线观看| 国产成人精品久久免费动漫 | 亚洲精品国产日韩| 亚洲日本在线电影| 福利免费在线观看| 人妻无码一区二区三区免费 | 亚洲无删减国产精品一区| 国产精品亚洲综合五月天| 一二三四在线观看免费中文在线观看| 尤物视频在线免费观看| 亚洲成A人片在线观看无码3D | 亚洲人成网亚洲欧洲无码久久 | 亚洲kkk4444在线观看| 三年片在线观看免费观看高清电影 | 亚洲精品国产日韩无码AV永久免费网 | 日本一区二区三区日本免费| 亚洲第一se情网站| 性色午夜视频免费男人的天堂| 女人被男人桶得好爽免费视频| 亚洲av最新在线网址| 亚洲av日韩aⅴ无码色老头| 久久99热精品免费观看牛牛| 久久久久亚洲AV无码专区首JN| 老司机午夜在线视频免费| 亚欧色视频在线观看免费| 亚洲国产精品综合福利专区| 精精国产www视频在线观看免费| 久久精品免费一区二区喷潮| 亚洲啪AV永久无码精品放毛片| 国产人妖ts在线观看免费视频| 亚洲福利秒拍一区二区| 少妇性饥渴无码A区免费| 男女超爽刺激视频免费播放| 丝袜熟女国偷自产中文字幕亚洲| 曰批视频免费30分钟成人| 亚洲天堂一区二区三区| 毛片免费全部播放一级| 67194在线午夜亚洲| wwwxxx亚洲| 亚洲国产av无码精品| a级片免费观看视频|