答えて
AES-CCMの暗号化時間を計算する方法を知りたいと思います。
Crypto ++ wikiは、記事Benchmarksを提供します。ライブラリのパフォーマンス、スループットの計算方法、実際のスループットが測定されるソースコードを参照する方法など、多くの詳細を提供します。信じられないかもしれませんが、clock
への簡単な呼び出しは大量の暗号化を測定するのに有効です。同じwiki記事のBenchmarks | Timing Loopも参照してください。
AES/CCMをベンチマークするには、次のようにします。これはCrypto ++ベンチマークコードに基づいていますが、clock
への直接呼び出しの代わりにThreadUserTimer
を使用します。 ThreadUserTimer
は、すべてのOSとすべてのバージョンのC++で動作します。
プロセッサ速度をcpuFreq
にダイヤルインする必要があります。 は、アイドル状態またはCレベルのスリープ状態からCPUを移動するために./governor.sh perf
を実行する必要がありますが、Linuxスクリプトであるため、実行できません。これはTestScript/
フォルダにあります。
#include "cryptlib.h"
#include "secblock.h"
#include "hrtimer.h"
#include "osrng.h"
#include "modes.h"
#include "aes.h"
#include "ccm.h"
#include <iostream>
const double runTimeInSeconds = 3.0;
const double cpuFreq = 2.7*1000*1000*1000;
int main(int argc, char* argv[])
{
using namespace CryptoPP;
AutoSeededRandomPool prng;
SecByteBlock key(16);
prng.GenerateBlock(key, key.size());
CCM<AES>::Encryption cipher;
cipher.SetKeyWithIV(key, key.size(), key);
const int BUF_SIZE=RoundUpToMultipleOf(2048U,
dynamic_cast<StreamTransformation&>(cipher).OptimalBlockSize());
AlignedSecByteBlock buf(BUF_SIZE);
prng.GenerateBlock(buf, BUF_SIZE);
double elapsedTimeInSeconds;
unsigned long i=0, blocks=1;
ThreadUserTimer timer;
timer.StartTimer();
do
{
blocks *= 2;
for (; i<blocks; i++)
cipher.ProcessString(buf, BUF_SIZE);
elapsedTimeInSeconds = timer.ElapsedTimeAsDouble();
}
while (elapsedTimeInSeconds < runTimeInSeconds);
const double bytes = static_cast<double>(BUF_SIZE) * blocks;
const double ghz = cpuFreq/1000/1000/1000;
const double mbs = bytes/1024/1024/elapsedTimeInSeconds;
const double cpb = elapsedTimeInSeconds * cpuFreq/bytes;
std::cout << cipher.AlgorithmName() << " benchmarks..." << std::endl;
std::cout << " " << ghz << " GHz cpu frequency" << std::endl;
std::cout << " " << cpb << " cycles per byte (cpb)" << std::endl;
std::cout << " " << mbs << " MiB per second (MiB)" << std::endl;
// std::cout << " " << elapsedTimeInSeconds << " seconds passed" << std::endl;
// std::cout << " " << (word64) bytes << " bytes processed" << std::endl;
return 0;
}
で2.7 GHzの結果でコアi5-6400上でそれを実行:CTRモードで
$ g++ bench.cxx ./libcryptopp.a -o bench.exe
$ ./bench.exe
AES/CCM benchmarks...
2.7 GHz cpu frequency
3.00491 cycles per byte (cpb)
856.904 MiB per second (MiB)
通常あなたがベンチマークのライブラリを。たとえば、SUPERCOPベンチマークのすべてがモードを使用して実行されます。その後、"modes.h"
を含むことにより、CTRモードに切り替える、とすることができます
CTR_Mode<AES>::Encryption cipher;
cipher.SetKeyWithIV(key, key.size(), key);
を最後に、CTRモードを使用して同じテスト:
$ ./bench.exe
AES/CTR benchmarks...
2.7 GHz cpu frequency
0.568922 cycles per byte (cpb)
4525.97 MiB per second (MiB)
これを閉じるのに使用した複製は一般的すぎますか?これを再開するか、dup-listをより具体的な複製に編集する必要がありますか?とても一般的に見える質問には良い答えがあるとは思っていませんでしたが、今ではあなたは研磨の価値があるかもしれないと書いています。 –
@PeterCordes - 良い質問です。もともと私はあなたにpingをして、あなたにそのことを再考するように頼んでいた。私が質問を読んだとき、私は2つの部分があることを見た。最初に、基本的な「ベンチマーク」の部分が何度も尋ねられ、答えられました。もう一つはCrypto ++の部分です。この答えは、ブロックを処理する 'BlockTransformation'クラスの' ProcessString'やCrypto ++ 'ThreadUserTimer'を使ってすべてのOSとすべてのバージョンのC++でうまく動作するタイマーを得るような、Crypto ++の部分に焦点を当てています。 'ThreadUserTimer'は完璧ではありませんが、OSやC++の移植性に関しては、たくさんのことが言えます。 – jww
私は間違いであることが判明した場合、それが逆転する可能性があることを知っているので、重複して質問をクローズしています。もし私が正しいことをしたと思っていない、あるいは再開するために投票したら、私はpingをしなければなりません。 –
- 1. AES暗号化/秒数の計算
- 2. マルチライターで暗号化されたデータのハッシュを計算する
- 3. SAPハナのハッシュ/暗号化計算式ビュー
- 4. 暗号化されたデータの最大サイズを計算する
- 5. 暗号化と復号化時にXOR暗号化の結果が異なる
- 6. 計算時間
- 7. 時間計算
- 8. 時間計算
- 9. XML暗号化アドレス空間
- 10. 瞬時の時間計算
- 11. トリッキーな暗号化アルゴリズムの設計
- 12. 良い暗号化/暗号化の本
- 13. Mysqlの時間計算 - 時間のみ
- 14. ポストグル時間計算
- 15. ビッグシータ、時間計算
- 16. 時間計算エラー
- 17. 計算時間が
- 18. シーザー暗号の暗号化が間違っている
- 19. 時間を加算して合計時間を計算する
- 20. 行列乗算による暗号化
- 21. ビット演算子で暗号化クラスを符号化する
- 22. シーザー暗号暗号化Python
- 23. JavaとPHPの間の文字列の暗号化/復号化
- 24. 暗号ブロックチェーンの復号XOR「暗号化」
- 25. OpenAM:RESTFUL API - 暗号化/暗号化パスワード
- 26. VB2008とAndroidの間の暗号化/復号化
- 27. CloudflareとHerokuの間の暗号化
- 28. 相対時間の計算
- 29. Pythonのヒープソート時間計算
- 30. 時間計算のPython
ことができないだけで、時間関数の呼び出しあなたは? – user3532232
詳細を教えてください – Peace
開始時間を取得して保存し、多くの繰り返しのループで機能を実行し、終了時間を取得し、開始時間を減算し、繰り返し数で除算することが望ましいです。数回これを行い、平均を取得します。 – zaph