ちりもつもればミルキーウェイ

好奇心に可処分時間が奪われる

2021-01-01から1年間の記事一覧

2021年の振り返り

はじめに 2021年色々やったので振り返るぞ 仕事 技術的な面でいうと proto管理のレポジトリつくったり した。 あと個人的な課題としてスループットにムラがあってなかなか安定しないというやつがあり、EMとかと相談しつつあれこれ対策を打ってかなり改善した…

多倍長整数の四則演算

はじめに これは RSA完全理解 Advent Calendar の15日目の記事です。 RSAについてはひとしきり説明が終わったので、スクラッチで書くために巨大な数の四則演算について説明しようと思います。 四則演算さえできれば!いままでやったユークリッド互除法で逆元…

すべての平文mに対してのRSAの証明

はじめに これは RSA完全理解 Advent Calendar の14日目の記事です 以前 p, qと互いに素なmでのRSAの証明 をやりましたが、今回はp, qと互いに素でないときも含めた証明をやろうと思います。 探しても と が互いに素でないときに言及する証明は少ないので、…

ファイ関数とオイラーの定理

はじめに これは RSA完全理解 Advent Calendar の13日目の記事です RSAの証明は以前フェルマーの小定理を用いてやりましたが、オイラーの定理を利用した証明も多いです。 勉強やりはじめると、理解のために肌に合う証明を探し求めたりすると思うので、ファイ…

p-1法による素因数分解

はじめに これは RSA完全理解 Advent Calendar の12日目の記事です RSAについて語る上で、素因数分解の困難さにふれないわけにはいかんやろ!ということで、素因数分解アルゴリズムの中でも簡単なp-1法について紹介します! (ほんとうは数体ふるい法が実用上…

素のRSAの安全性の評価

はじめに これは RSA完全理解 Advent Calendar の11日目の記事です。 RSAの基本的なしくみがわかったところで、RSAの安全性がどの要素に依拠しているのか紹介しその困難性について紹介します。 RSA自体の困難性はおもに素因数分解の困難さに依拠しているので…

剰余環の逆元の探索とRSAの秘密鍵生成

はじめに これは RSA完全理解 Advent Calendar の10日目の記事です いままででユークリッド互除法でベズーの等式の解が探索できることと、剰余環とかの言葉の意味がわかるようになりました。 ここまでくると剰余環の逆元を求める処理の説明ができるのでやっ…

群、環、体とかの言葉の整理

はじめに これは RSA完全理解 Advent Calendar の9日目の記事です。 前回までで拡張ユークリッド互除法でベズーの等式の解を探索できることがわかったので、それで剰余環の逆元がだせることを知るために言葉の整理をしよう!という回です。 (というか説明で…

拡張ユークリッド互除法によるベズーの等式の解の探索

はじめに これは RSA完全理解 Advent Calendar の8日目の記事です。 さて、同カレンダーの過去の記事にて ユークリッド互除法 ベズーの等式 について紹介したので、今回はユークリッド互除法をつかってベズーの等式の解を探索する方法について紹介します。 …

ベズーの等式

はじめに これは RSA完全理解 Advent Calendar の7日目の記事です RSAにおける秘密鍵の生成である を理解するための一環として、前回はユークリッド互除法について説明しました。 今回はベズーの等式と、関連する定理について説明しようと思います。 次回は…

ユークリッド互除法

はじめに これは RSA完全理解 Advent Calendar の6日目の記事です RSAの話は一旦お休みして、今回からは剰余環の逆元をもとめるための前提知識をまとめていきたいと思います おおまかな流れとしては、 ユークリッド互除法の紹介 ベズーの等式と関連する定理…

RSAによるブラインド署名

はじめに これは RSA完全理解 Advent Calendar の5日目の記事です RSAが署名につかえるよーみたいな話をやったので、今回はブラインド署名について話そうと思います なお今回紹介するブラインド署名の仕組みはある程度簡略化しています。実際にはRSA署名自体…

RSAによる署名

はじめに これは RSA完全理解 Advent Calendar の4日目の記事です 昨日はRSAの操作について説明したので、今回はそれをつかった署名について触れたいと思います なお、今回紹介する署名は実際の方式から大幅に簡略化しています。現実には各種攻撃を防ぐため…

RSAの暗号化/復号操作とその証明

はじめに これは RSA完全理解 Advent Calendar の3日目の記事です フェルマーの小定理の証明 をやったので、それを使ってRSAの暗号化/復号が成り立つ証明をやります なお、秘密鍵の生成方法についてはベズーの等式や拡張ユークリッド互除法の知識が必要なの…

フェルマーの小定理とその証明

はじめに これは RSA完全理解 Advent Calendar の2日目の記事です(遅刻した) なんでRSAの話なのにいかにも数学っぽい定理の証明をやるかというと、 RSAの暗号化/復号の操作の証明にはこいつをつかうからです なんならそのうちベズーの等式とかも証明しないと…

RSA完全理解 Advent Calendar について

はじめに これは RSA完全理解 Advent Calendar の1日目の記事だぞ 以前RSAの証明とかざっとよんで社内勉強会で以下のスライドを作った speakerdeck.com このスライドの内容は RSAの暗号化/復号の操作の説明 それで復号できる証明 素因数分解の困難性について…

Goのruntimeコードリーディングで役立つかもしれない個人的tipsまとめ

Go

はじめに これは Kyash Advent Calendar 2021 の1日目の記事です。 Kyashで入出金関連をメインで担当しているチームで働いている convto です。 最近趣味でGoのruntime周りのソースコードを読み始めているんですが、Goのruntime(や一部の標準パッケージ、そ…

「問題解決力を鍛える!アルゴリズムとデータ」構造よんだ

リンクは以下 https://www.amazon.co.jp/dp/4065128447 会社の輪読会で読んだ 輪読会で読んだシリーズはほかに データ指向アプリケーションデザイン とかがあるけど、こいつも面白かった アルゴリズム関連の本はあまり読んだことがないのでかなりむずい部分…

ブロック暗号のCBCモードについてざっと調べた

はじめに 以前EBCモードかいて、CBCについて興味が出たので調べてみた そのうち実装もしてみたいけど今回はとりあえずやってることとかを理解するに留める CBCってなにやってるの ブロック暗号の暗号利用モードは、与えられたブロックをどう暗号化処理に引き…

Goでブロック暗号のECB暗号モード書いた

はじめに 暗号周りがなんとなく気になって、一番簡単そうな暗号利用モードのECB実装するかーという気持ちになったのでやった 色々調べたら ちょうどGoには実装されてないっぽく 、かつ単にブロックを順番に暗号化するだけでクソ単純でとっつきやすそうなので…

wireのunmarshallerがひと落ち着きした

wireのunmarshallerがだいたいできて一通り落ち着いたので投下 github.com READMEもサポートしてる型くらいは書いておいた。useageで動くplaygroundのリンクはってあるのが丁寧さ+1といったかんじ どのくらい実装したの 下位互換まわりは全く実装してないけ…

データ指向アプリケーションデザイン読んだ

3ヶ月前くらいに読んで、そういえば感想まとめてなかったなーと思い立ったので書く www.oreilly.co.jp 社内の輪読会でよんだ。読み始めが2020年12月で、読了したのが2021年5月だった。半年くらいかけて読んだっぽい 内容としては、データのバイナリ上のフォ…

Goのreflectでこんなときどうする?集

Go

はじめに reflectでゴニョゴニョしたいときに毎回沼にハマってすごく時間をつかうので、使うパターンをメモっておく。 随時更新(したい)です それではレッツゴー 任意の値があるプリミティブ型か確認したい if reflect.ValueOf(v).Kind() == reflect.Int64 {…

自作のprotobuf unmarshalerで固定長64bit/32bitフィールドをパースできるようにした

はじめに 前に簡易的なunmarshalerかいたので それに機能追加した話 この時点では、対応するtypeはVarintとLength-delimitedだけだったので、固定長64bit/32bitフィールドをパースできるようにしました。 差分は以下 https://github.com/convto/protowire/co…

152行でprotobufの簡易的なunmarshalerかいた

はじめに protobufのエンコーディングはwireという名前で以下に仕様がある developers.google.com 最近仕様を読んだりproto定義から生成される成果物を読んだりいろいろしていて、Unmarshalerかける気がしたので書いてみた。 すべての仕様に準拠するものは大…

zigzag encodingとは

はじめに 符号付き整数は2の補数表現で表されることが多いが、エンコーディングによっては zigzag encoding なるものを使っている場合もある。 2の補数表現と比較した上で、zigzag encodingとはどういうバイト表現でどのような特徴があるかまとめる zigzag e…

算術シフトと論理シフト

はじめに エンコーディング周りを調べていたら、Goの場合は左辺のオペラントがintかuintかで処理が違うことがわかった。 ドキュメントにも明記されていて、算術シフトと論理シフトというやつを使い分けているらしい。 シフト演算を多用する処理は書いたこと…

2の補数表現

はじめに エンコーディングとかをしらべていたら2の補数表現なる概念があることを知った 個人用メモとしてどういう仕組みなのかまとめておく ざっくりまとめ 2の補数表現とは、ある値の補数bitをその値の負数として扱おうというもの (正確には、0を正数とし…

Goのnet/httpでtimeout指定したときにどう制御されるのか追ってみた

Go

はじめに net/httpを使ったhttpリクエストでは2つの方法でtimeout管理ができます。 Client.Timeout 値の設定( コメントを読む感じrequestにcontextを入れてもOKだぞいというのは言及されてる Request.WithContext なり NewRequestWithContext なりでcontext…

protoc-gen-gogoの成果物がかなり読みやすい件

3行まとめ protoc-gen-gogoの成果物みてみたら、 ベタッとbytesをunmarshalするコードが書いてあって、 仕様と一緒に見たらかなり読みやすかった きっかけ ectdのraftコードを読んでたらたまたまprotoc-gen-gogoで生成されたコードを発見。 github.com ちょ…