SlideShare a Scribd company logo
1 of 40
高速な暗号実装のためにしてきたこと
MANABIYA
2018/3/24 光成滋生
• サイボウズ・ラボで暗号とセキュリティのR&D
• 『クラウドを支えるこれからの暗号技術』
• 『パターン認識と機械学習の学習』
光成滋生(@herumi)
2 / 40
• 高機能暗号の紹介
• 自作アセンブラの紹介
• ソフトウェア開発の中で私が経験したことの紹介
• ソフトウェア開発で考えること・気を付けていること
• 印象に残ってるバグ
• まとめ
講演の目的
3 / 40
• 従来の古典的な暗号に無い機能を持つ暗号の総称
• 定義の決まった用語ではない
• クラウドサービスでの利用を想定したものが多い
• 秘匿検索
• キーワードを暗号化したまま検索できる
• 準同型暗号
• 暗号化したまま計算できる
• 属性ベース暗号
• 属性に応じた復号権限を制御できる
• etc.
高機能暗号
4 / 40
• 普通の暗号文は復号以外の操作を何もできない
• レベル2準同型暗号
• 暗号文(カプセル)を開けずに積和演算ができる
• アンケートの平均、分散、クロス集計などが可能
準同型暗号
123
+×1 3 42 × 14=
5 / 40
デモ
• 理論
• ペアリングベースによる効率のよい手法の提案
• 国際学会に採択(6月頃発表予定)
• 実装
• https://github.com/herumi/mcl
• C++/Xbyak/LLVMによるサーバ向け実装
• https://github.com/herumi/she-wasm
• JavaScript(WebAssembly)によるブラウザ向け実装
• https://herumi.github.io/she-wasm/she-demo.html (デモ)
理論と実装
7 / 40
• 個別のデータの中身を見ないで解析し
必要な情報のみを抽出する技術
• 産業技術総合研究所・早稲田大学 基幹理工学部 情報理工学科
• 実装エンジンに利用されている
• 秘匿ゲノム検索技術
• 化合物類似構造秘匿検索
• https://www.waseda.jp/fsci/giti/assets/uploads/2017/04/01ef9
9e5e54050220ce0ff592104af39.pdf 33ページより引用
応用例1(プライバシー保護データ解析)
8 / 40
• Zcash(暗号通貨)
• https://z.cash/
• 取り引きの追跡ができない匿名性の強い通貨
• ペアリングベースのゼロ知識証明(zkSNARKs)を用いて実現
• 入力を隠したまま正しい計算をしたかを検証可能
• DFINITY(ベンチャー)
• https://dfinity.org/
• Ethereumを拡張する仮想ブロックチェーンコンピュータ(?)
• ペアリングベースのBLS署名を用いて実現
• 秘密分散された公開鍵を用いて署名・集約が可能
応用例2
9 / 40
• 上位層はC++, 最下位層は独自アセンブリ言語 / LLVM
mclのモジュール構成
準同型暗号
ペアリング
楕円曲線
有限体
Xbyak
for x64
LLVM
for Aarch64
WebAssembly
BLS署名
10 / 40
• C++内DSLによるx86/x64向けJITアセンブラ
• 実行時にコード生成が可能なライブラリ
• https://github.com/herumi/xbyak
• 暗号ライブラリを作りやすくするために開発(2007/1~)
Xbyak
11 / 40
• Cとアセンブラ(以下asm)との連係が面倒
• 構造体が配列を含む場合
• これぐらいならちょっとしたツールで対応もできるが
• template<size_t N>struct A{ int v[N];};とかだと結構辛い
• asmの擬似命令を覚えるのが面倒
• %macro, %if, %imacro, etc...
• アセンブラによって異なる
• 構文が後づけなものが多く分かりにくい
従来のアセンブラの不満なところ(1/2)
struct A {
int a;
int b[4];
int c;
};
%define offset_A_a 0
%define offset_A_b 4
%define offset_A_c 20
なんらかの方法で
asm側に伝える
12 / 40
• インラインアセンブラ
• 64-bit Visual Studioでは廃止された
• gccのインラインアセンブラは闇(注:個人の感想)
• 組み込み(intrinsic)関数
• 最近はかなりよい(が)
• VCはtemplateと組み合わせると辛い
• asm出力を見ながら理想の状態に向けて調節するのが辛い
(注:個人の感想)
従来のアセンブラの不満なところ(2/2)
13 / 40
• できるだけNASMに似た構文を目指す
• 演算子オーバーロードでごにょごにょ
• ヘッダオンリー
• #includeするだけで使える
• ライブラリにするとリンカの設定やコンパイラオプションに
気をつかわないといけない
Xbyakの設計
mov eax, dword [ecx + eax * 4 + 8]
vgatherdpd xmm1, [ebp+32+xmm2*4], xmm3
mov(eax, dword [ecx + eax * 4 + 8]);
vgatherdpd(xmm1, ptr [ebp+32+xmm2*4], xmm3);
NASM
Xbyak
14 / 40
• 関数と生成される命令が完全に1対1
• CPUに応じた専用命令を使いやすい
• 制御(if, else, for)はC++そのものなので書きやすい
• Cのoffsetofなどのマクロで構造体などを直接扱える
Xbyakの特長
// 構造体A<4>のメンバcの値の読み込み
mov (eax, ptr [ecx + offsetof(A<4>, c)]);
// add(eax, eax)を3回出力
for (int i = 0; i < 3; i++) {
add(eax, eax);
}
15 / 40
• 64 * n-bit加算(ビット長に応じたコード生成)
多倍長加算の例
GenAdd(int n) {
for (int i = 0; i < n; i++) {
mov(rax, ptr [x+i*8]);
if (i == 0) add(rax, ptr [y+i*8]);
else adc(rax, ptr [y+i*8]);
mov(ptr [z+i*8], rax);
}
ret(); }
add3:
mov rax, [rsi]
add rax, [rdx]
mov [rdi], rax
mov rax, [rsi + 8]
adc rax, [rdx + 8]
mov [rdi + 8], rax
mov rax, [rsi + 16]
adc rax, [rdx + 16]
mov [rdi + 16], rax
ret
add2:
mov rax, [rsi]
add rax, [rdx]
mov [rdi], rax
mov rax, [rsi + 8]
adc rax, [rdx + 8]
mov[rdi + 8], eax
ret
N=2 N=3
16 / 40
• AVX-512対応依頼(2016/4)
• 対応CPU存在してないのに?
• マニュアル1000ページ以上
• 7月対応
• Knights Mill用のも欲しい(2016/11)
• 対応したけど
確認方法が無い
• 2017/12/8ローンチ
>I've checked the
encoding using an internal version of XED assembler/...
AVX-512完全(Ice Lakeまで)対応
17 / 40
• Intel CPU向けに最適化されたdeep learningライブラリ
• https://github.com/intel/mkl-dnn
• エンジン部分がXbyakで書かれている
• MKL-DNNが利用しているツール(上記urlより引用)
• Caffe Optimized for Intel Architecture, DeepBench,
PaddlePaddle, Tensorflow, Microsoft Cognitive Toolkit
(CNTK), Apache MXNet, Intel Computer Vision SDK, etc.
Intel MKL-DNN
18 / 40
• @chikoskiさん からの依頼
• プログラムを書くときに考えていること
• 何に気を付けて設計しているのか
• デバッグ
• 印象に残っているバグ
後半の内容
19 / 40
• (私がやってる暗号関係では)
• アルゴリズム
• わりと高度な数学
• 論文いっぱい
• 紙と鉛筆で考える
• データレイアウト
• いかにメモリアクセスを減らすか
• ex. 仮想関数を使わない(asmからアクセスしやすい)
• 基本命令のスループットとレイテンシ
• 一つのことをするのに沢山の方法がある
• 場合によっては選択するアルゴリズムが変わることも
開発中に考えていること
20 / 40
• 暗号アルゴリズムの速度は乗算(M)、加減算(A)
の回数で評価することが多かった
• 例. algo1はMが3回でAが5回. algo2はMが2回でAが7回
• もしMがAの10倍かかる(M=10A)なら
algo1=35A
algo2=27A
でalgo2が速い
• 2009年ごろ
• SIMDを使った手法が主流
• IntelのSIMDは64bitを超えるbitシフト(S)は苦手
• が、当時それを考慮した評価はあまり無かった
• Aが増えてもSが減ればトータルで高速なアルゴリズム
SIMD vs. add/sub/mul(1/2)
21 / 40
• 2009年~
• Core i7(Nehalem)で乗算のレイテンシーが3cycleと高速化
• SIMDより64×64→128bit乗算を使う方が速いかも
• SIMDを駆使した既存実装に対して2倍近い速度向上
• Haswellから利用可能なmulxなも使って世界最速
• https://github.com/herumi/ate-pairing
SIMD vs. add/sub/mul(2/2)
22 / 40
• 呼び出し既約
• Cの関数を呼び出すときのレジスタの値の設定ルール
• 例)Linuxなら第1~4引数がrdi, rsi, rdx, rcx
• 関数内でr12~r15, rbx, rbpを使いたければ値を退避・復元
• プロファイル上位のほとんどの関数をasm化
• それらの関数内での呼び出し規約は自分で決めてよい
• レジスタの退避・復元を最小化する呼び出し既約
• もちろんCから呼ぶとSEGV
• LLVMのコード生成より1.1~1.5倍速いことも
独自呼び出し既約(禁じ手)
23 / 40
func() // 擬似コード
store(rsp + 80, r12, r13, r14, r15,rbx, rbp);
計算本体
load(r12, r13, r14, r15, rbx, rbp, rsp + 80);
ret();
コンパイラから
呼ばれないなら
無くしてもよい
• 全てC++で完結しないことが多い
• 極めて速度が要求される部分だけC++ & asm
• DLL化してJava, C#, Go, Pythonなどから呼び出す
• C++クラスをC APIにする一般的な手順
• コンストラクタはcreateA();
• デストラクタはdestroyA(A* self);
• メソッドは第一引数がA*の関数
他言語と連係
class A {
void f(int x);
};
struct A;
A* createA();
void A_f(A* self, int x);
void destroyA(A* self);
C API
24 / 40
• JNI(Java Native interface)
• Javaからネイティブコードを呼び出すための仕組み
• SWIG
• C/C++をPython, PHP, Java, Goなどから呼ぶためのツール
• Javaと連係する場合
• C++のヘッダファイルからC APIへの変換コードを自動生成
• 自動生成されたC APIをJNIで呼び出し
Java側で同等のクラスを再構築
SWIGによるJavaとの連係
25 / 40
class A {
private long ptr;
A() {
ptr = createA();
}
};
• 私の暗号ライブラリをSWIG経由でJavaで利用
• しかしリークするはずが無い(と思った)
• 自分のC++側のコードにnew/mallocがない
• std::vectorなどの標準コンテナは利用しているが
• SWIGのせい?
• しかしそんな基本的な部分でバグがあるか?
• しかし(SWIGでないにしろ)そこにしか要因はないと思われ
メモリリークの報告
26 / 40
• 面倒な制約
• 私はそのコードや現象を直接見られない
• モニタの報告のみ
• C++側での対応
• C++側で全てのメソッドに呼び出し履歴を保存
• コンストラクタは呼ばれているが
デストラクタが呼ばれていないインスタンスの存在
場所の特定
27 / 40
• SWIGによるデストラクタの扱い
• Javaのラッパークラスのfinalize()でデストラクタを呼ぶ
原因の絞り込み
public class Fr {
private transient long swigCPtr;
protected transient boolean swigCMemOwn;
protected void finalize() { delete(); }
public synchronized void delete() {
if (swigCPtr == 0) return;
if (swigCMemOwn) {
swigCMemOwn = false;
Bn256JNI.delete_Fr(swigCPtr);
}
swigCPtr = 0;
}
28 / 40
• 基本的にいつ呼ばれるか分からない
• ループが終わってからfinalize()が呼ばれるかもしれない
• プログラム終了時までに呼ばれないかもしれない
• JavaはC++でどれだけメモリ確保したか知らない
• 1GB x 100の「メモリプール」が発生する
Javaのfinalize()
for (int i = 0; i < 100; i++){
Fr *x = new Fr();
x = null;
}
29 / 40
• 巨大なメモリを確保するインスタンスを再利用
してもらう
• 「メモリリーク」が解消された
場当たり対処方法
for (int i = 0; i < 100; i++){
Fr *x = new Fr();
x.calc(...);
}
Fr *x = new Fr();
for (int i = 0; i < 100; i++){
x.calc(...);
}
30 / 40
• Go
• deferはインスタンスの寿命とスコープが異なるので使えない
• インスタンス生成毎にruntime.SetFinalizerにdestroyAを登録
• しかしやはりいつ呼ばれるかは不明
• JavaScript(WebAssembly)
• finalizerが無い
• (対処方法)classがUint32Arrayを持ちメソッドごとにcopy
• 細かい計算ではオーバーヘッドが大きいが、そもそも
呼び出しのオーバーヘッドが大きいので許せることもある
• Rust
• GCは無い
• std::ops::Dropで確実にdestroyAを呼べる
GCのある言語は辛い
31 / 40
• 必要サイズを取得するC APIを追加
• 一般解ではないがC/C++側でメモリ管理をしない戦略
• getSizeForA()が固定長のときのGoの例
メモリ管理を呼び出し側でしてもらう
size_t getSizeForA(); // createA()で必要だったメモリ量
bool InitA(A* a); // 領域aにAを構築する
void A_foo(A* a);
type A struct {
self *C.A
}
func NewA *A {
p := new(A)
p.self = C.createA()
runtime.SetFinalizer(p, destroyA)
return p
} 32 / 40
type A sturct {
v [4]C.unt64_t
}
func NewA *A {
return new(A)
}
• コードを書くよりバグ特定&修正の方が時間がかかる
• テスト
• 境界値を使ったテスト
• 再現性
• 往々にして根気がいる
• 場所の特定
• 最小コード
• 絶対に正しいところと不安なところの境界
• 論理的思考と犯人当てゲーム
• 想定外の答え
• 持ち駒(有用なツール)を増やす
バグ退治
33 / 40
• あるVM上で暗号ライブラリmclが未定義命令で落ちた
• CPU自体はその命令に対応している
• mclはCPUがその命令に対応してるかcpuidを用いて確認
• 対応してないと代替命令を生成
• 原因
• VM自体がまだその命令に対応していなかった
• が、cpuidの誤ったエミュレーション
• 対応しているという結果を返していた
Illegal instruction
34 / 40
• gccのバージョンを上げたらある処理が4倍遅くなった
• 関数のそれぞれのasm出力コードは問題なさそう
• 謎の挙動
• 右のbenchが遅い
• (B)と(C)の違いは?
おかしな因果関係?
void bench() {
(A)ベンチマーク
// (B)
}
int main() {
bench();
// (C)
unitTest1();
// (D)
unitTest2();
// (E)
unitTest3();
}
35 / 40
ここでexit()すると速い
ここでexitは少し遅い
ここだともう少し遅い
ここでexit()すると遅い
• gccのinlineを管理するオプション
• --param inline-unit-growth=<N>なども
• gccはinline対象関数の総量を管理している
• unitテスト内に大量のinline可能な関数がある
• 最適化レベルが上がりinline対象関数が増える
• bench内の関数がinline対象外となり遅くなる
• mainの途中でexitした後のコードは生成されない
• inline対象が減り、結果benchがinline化されて速くなる
• bench内でexitしてもmain内でのinline対象は減らない
• benchは速くならない
--param max-inline-insns-single=<N>
36 / 40
• AVX利用時に標準数学関数が5倍遅くなる現象
• 最小コードと原因追求に苦労
Visual Studioであったバグ
const struct A {
float a[8];
A() {
const float x = log(2.0);
for (int i = 0; i < 8; i++) a[i] = x;
}
} notUsed;
int main() {
...
}
37 / 40
一度も参照されない変数
7だと遅くならない
この中のsinやexpが遅くなる
• VCは8回ループをAVX2のシャッフル命令で最適化
• しかしVCはSSEに切り戻すコード(vzeroupper)を入れ忘れ
• CPUは状態を持っている
• SSE向け関数自体は問題ないので現象を特定しづらい
• Intel Software Development Emulator(sde)やperfで
AVX⇔SSEの切り替え回数を取得できる
AVXとSSEの切り替えペナルティ
38 / 40
clean
upper
dirty
upper
AVX使用
vzeroupper
SSE AVX
SSE
速度低下
• 不具合の犯人はもちろん自分の可能性が一番高い
• が、犯人が他にいないか頭の片隅に置きながら調査と推論
• コンパイラ
• デバッガ
• OS/device driver
• ファームウェア
• ハードウェア
• 根気と気分転換
• cf. 「半年かかったバグ調査の顛末は」
http://blog.cybozu.io/entry/2016/01/08/080000
いろいろある
39 / 40
「○○したら△だった」
「△したいなら○○すべき」
• 論理的思考
• 数学
• よいモデル
• 因果関係
• 自分の得意なことを伸ばす
• +αでその周辺を膨らませる
• 根気
• 長く続けてるとよいことがあるかもしれない
• よいツール
• 先人の知恵に乗っかろう
まとめ
×
40 / 40

More Related Content

What's hot

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析Yuki Mizuno
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみるDevelopers Summit
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてTakuto Wada
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介MITSUNARI Shigeo
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込むYoshiki Hayama
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門KnowledgeGraph
 
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方Yoshiki Hayama
 
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of VeinTokoroten Nakayama
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料SECCON Beginners
 
ナレッジグラフとオントロジー
ナレッジグラフとオントロジーナレッジグラフとオントロジー
ナレッジグラフとオントロジーUniversity of Tsukuba
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 

What's hot (20)

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
【B-4】オープンソース開発で、フリー静的解析ツールを使ってみる
 
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介自作ペアリング/BLS署名ライブラリの紹介
自作ペアリング/BLS署名ライブラリの紹介
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
「ウチの事業部の商品をWebサイト・アプリで目立たせて!」私だけじゃなかった! 社内政治と落としどころの見つけ方
 
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 
ナレッジグラフとオントロジー
ナレッジグラフとオントロジーナレッジグラフとオントロジー
ナレッジグラフとオントロジー
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 

Similar to 高速な暗号実装のためにしてきたこと

Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメHideyuki Takeuchi
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなしMasahiro NAKAYAMA
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Takamasa Maejima
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Masaru Horioka
 

Similar to 高速な暗号実装のためにしてきたこと (20)

Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
Code jp2015 cpuの話
Code jp2015 cpuの話Code jp2015 cpuの話
Code jp2015 cpuの話
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
Windows Server 2016 で作るシンプルなハイパーコンバージドインフラ (Microsoft TechSummit 2016)
 
POWER8サーバでMariaDBベンチマーク
POWER8サーバでMariaDBベンチマークPOWER8サーバでMariaDBベンチマーク
POWER8サーバでMariaDBベンチマーク
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 

More from MITSUNARI Shigeo

範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化MITSUNARI Shigeo
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介MITSUNARI Shigeo
 

More from MITSUNARI Shigeo (20)

範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advanced
 
暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
暗認本読書会10
暗認本読書会10暗認本読書会10
暗認本読書会10
 
暗認本読書会9
暗認本読書会9暗認本読書会9
暗認本読書会9
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
暗認本読書会8
暗認本読書会8暗認本読書会8
暗認本読書会8
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会5
暗認本読書会5暗認本読書会5
暗認本読書会5
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
楕円曲線と暗号
楕円曲線と暗号楕円曲線と暗号
楕円曲線と暗号
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介LazyFP vulnerabilityの紹介
LazyFP vulnerabilityの紹介
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

高速な暗号実装のためにしてきたこと