【发布时间】:2012-04-09 14:46:23
【问题描述】:
注意: 对于那些无法比提出无聊、愚蠢的 cmets 甚至建议关闭有效问题的人来说,请在此处查看已接受的答案:Using GNU/Linux system call `splice` for zero-copy Socket to Socket data transfers in Haskell 作为一个很好的例子,说明如何为那些真正的人提供适当的帮助寻求建设性的答案!
您好,我刚刚在 Mathematica 8 的文档中阅读 PowerMod 并想测试 Haksell RSA 包 (ghc --make -O2 -O3 -fllvm -optlo-O3 test.hs):
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad
import System.Random
import Codec.Crypto.RSA
import Data.ByteString.Lazy
import Data.ByteString.Char8
import Criterion.Main
import Criterion.Config
main :: IO ()
main = do
print m1
print m4
print m8
defaultMainWith defaultConfig (return ()) [
bgroup "RSA" [
bench "1" $ ed m1
, bench "4" $ ed m4
, bench "8" $ ed m8
]
]
m1 = fromChunks [ Data.ByteString.Char8.replicate (1*1024) '0' ]
m4 = fromChunks [ Data.ByteString.Char8.replicate (4*1024) '0' ]
m8 = fromChunks [ Data.ByteString.Char8.replicate (8*1024) '0' ]
ed m = do
g1 <- newStdGen
let (el,il,g2) = generateKeyPair g1 1024
loop 1 g2 el il m
loop :: RandomGen g => Int -> g -> PublicKey -> PrivateKey -> Data.ByteString.Lazy.ByteString -> IO ()
loop n g e i m = do
let nn = n-1
let (em,ng) = encrypt g e m
let dm = decrypt i em
when (m == dm) $ Data.ByteString.Char8.putStr "1"
when (nn > 0 ) $ loop nn ng e i m
也在 Mathematica 中尝试过:
{p, q} = Prime[RandomInteger[{10^4, 10^5}, {2}]];
{p, q, n = p q}
\[Lambda] = CarmichaelLambda[n]
d = NestWhile[#1 + 1 & , Round[n/3], GCD[\[Lambda], #1] =!= 1 &]
e = PowerMod[d, -1, \[Lambda]]
enc = PowerMod[#, e, n] &;
dec = PowerMod[#, d, n] &;
c = ConstantArray[48, 8 1024];
t = Table[c // enc // dec; // AbsoluteTiming, {10}][[All, 1]]
Haskell (m8) 和 Mathematica 案例中的时序相似:
{0.313015, 0.302337, 0.303766, 0.303321, 0.303018, 0.302574, \
0.302511, 0.303958, 0.301411, 0.300820}
对于 RSA 来说,每 8192 字节长的消息 300 毫秒是可接受的性能吗? OpenSSL 或其他实现如何比较?
(测试台:64 位 linux;4xCORE,Intel(R) Core(TM) i5 CPU M 430 @ 2.27GHz)
【问题讨论】:
-
这是一个评论,而不是一个答案......但说真的,下载 OpenSSL 并尝试一下也不错。
-
很公平。但是您的问题真正归结为“OpenSSL 在您的体验中有多快?”,这不一定最适合 Stack Overflow。鉴于 OpenSSL 是一种常用的实现,运行它可能足以表明 Mathematica 版本与标准相比有多快/多慢。另外,这将是最公平的比较(在同一台机器上运行!)。
-
如果有任何帮助,谷歌搜索“OpenSSL benchmark”会返回如下内容:wiki.openwrt.org/inbox/benchmark.openssl,其中包括 RSA 结果。不过,我不确定这些数字是什么意思。
-
在您的 Haskell 基准测试中,您包括生成密钥对的时间。 a) 是否也包含在 Mathematica 时代,b) 包含它是否明智?
-
我刚刚修补了 RSA 以使用 CryptoRandomGen,所以如果你没有使用过去几天的版本,那么性能会(轻微)不同。
标签: performance haskell wolfram-mathematica openssl rsa