新聞中心

        EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 百度云RSA解密加速服務(wù)

        百度云RSA解密加速服務(wù)

        作者: 時(shí)間:2018-07-25 來源:網(wǎng)絡(luò) 收藏

        RSA算法是一種最廣為使用的“非對稱加密算法”,一般公鑰/私鑰長度越長,安全性就越好,計(jì)算也越復(fù)雜。百度云https改造中應(yīng)用了RSA 2048加解密算法,針對高計(jì)算復(fù)雜度的RSA解密任務(wù),我們運(yùn)用上的并行計(jì)算資源和定制化的數(shù)據(jù)通路,提供了高達(dá)45000QPS的解密能力(是CPU單線程吞吐率的75倍以上,媲美商用ASIC加解密卡的吞吐率),同時(shí)還將提供獨(dú)具特色的私鑰管理方案,令系統(tǒng)安全性得到了質(zhì)的提升。

        本文引用地址:http://www.104case.com/article/201807/383800.htm

        軟件調(diào)用API執(zhí)行

        編譯

        執(zhí)行l(wèi)spci | grep -i Xilinx,輸出非空,證實(shí)已被正確透傳給虛擬機(jī)。

        編譯,進(jìn)入rsa-driver目錄,執(zhí)行make。

        如提示“No such file or directory”,請修改Makefile中的KERNELDIR變量,使之指向正確的內(nèi)核編譯目錄,一般為/usr/src/kernels/$(uname -r)。

        如編譯時(shí)提示符號重定義,請刪除源文件中的PDE_DATA、file_inode、kvalloc、kvfree等符號。

        加載,執(zhí)行insmod fpga_drive.ko。

        檢查/dev/fpga0的權(quán)限是否為0666,如過不是,請執(zhí)行chmod 666 /dev/fpga0。

        在openssl系統(tǒng)engine目錄創(chuàng)建到rsa-api/output/so/libfpga_rsa_cpp.so的軟鏈接,即執(zhí)行l(wèi)n -s /path/to/rsa-api/so/libfpga_rsa_cpp.so /usr/lib64/openssl/engines/libfpga_rsa_cpp.so。

        通過openssl標(biāo)準(zhǔn)engine接口使用RSA加速功能,在正確加載并初始化engine后即可通過RSA_private_encrypt、RSA_private_decrypt進(jìn)行RSA私鑰加解密。

        支持密鑰長度在2048 bits以下的RSA私鑰加解密。如給定密鑰長度超出此范圍,engine會轉(zhuǎn)交CPU計(jì)算,此時(shí)性能等同于直接使用CPU處理。

        #include ‹openssl/rsa.h›

        #include ‹openssl/engine.h›

        #include ‹openssl/err.h›

        OpenSSL_add_all_algorithms();

        ERR_load_crypto_strings();

        ENGINE_load_dynamic();

        /* load engine */

        ENGINE *engine = ENGINE_by_id(fpga_rsa_cpp);

        if (engine == NULL) {

        LOG(WARNING) ‹‹ Could not Load fpga_rsa_cpp Engine!;

        return 1;

        }

        LOG(INFO) ‹‹ fpga_rsa_cpp Engine successfully loaded;

        /* init engine */

        int init_ret = ENGINE_init(engine);

        int set_ret = ENGINE_set_default_RSA(engine);

        LOG(INFO) ‹‹ engine name = ‹‹ ENGINE_get_name(engine);

        LOG(INFO) ‹‹ init_ret = ‹‹ init_ret;

        LOG(INFO) ‹‹ set_ret = ‹‹ set_ret;

        if ((init_ret != 1) || (set_ret != 1)) {

        LOG(WARNING) ‹‹ Failed to init engine;

        return 1;

        }

        /* use engine */

        RSA_private_decrypt(flen, from, to, rsa, padding);

        性能測試

        qps

        執(zhí)行openssl speed rsa2048 -engine fpga_rsa_cpp -multi 36,在sign/s一欄中可以看到qps。正常情況應(yīng)在40000/s以上。

        latency

        執(zhí)行openssl speed rsa2048 -engine fpga_rsa_cpp -multi 1,在sign一欄中可以看到latency。正常情況應(yīng)在700us左右。

        RSA私鑰解密QPS對比

        FPGA解決方案與使用雙路Intel Xeon E5-2620 v2服務(wù)器(超線程開啟,共24核)進(jìn)行純CPU計(jì)算相比,性能優(yōu)勢十分明顯,如下圖所示。當(dāng)RSA密鑰長度為512 bits、1024 bits和2048 bits時(shí),前者的私鑰解密QPS分別是后者的2.13、4.52和9.36倍,latency僅為后者的89%、50%和27%。



        關(guān)鍵詞: FPGA 驅(qū)動

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 高安市| 武汉市| 东宁县| 盱眙县| 乐清市| 庆城县| 华阴市| 大连市| 光山县| 乃东县| 海晏县| 黔西县| 临猗县| 威海市| 宁国市| 宣城市| 长岭县| 双城市| 额济纳旗| 博罗县| 胶南市| 鸡东县| 平阴县| 泊头市| 社会| 合作市| 来宾市| 岱山县| 碌曲县| 光泽县| 鹤庆县| 武汉市| 日喀则市| 齐河县| 古浪县| 包头市| 榕江县| 额济纳旗| 博罗县| 盐亭县| 石林|