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

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

Go 1.22 の実装を見て学ぶ PCG-DXSM による疑似乱数の生成

PCG(permuted congruential generator)とは PCG自体の元ネタは PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation にあります。(この論文は疑似乱数の統計的性質の比較とかいろいろやってるデカい…

線形合同法(LCG)による疑似乱数の生成

線形合同法とは 線形合同法(LCG; Linear Congruential Generator)は古くから知られている疑似乱数生成アルゴリズムで、背景の理論も簡単。 実行コストが低いため、暗号学的な安全性を求めないかつコンピューティングリソースに制約があるようなユースケース…

Go で word size が 32bit or 64bit どっちか知りた〜い

今回は小ネタ。みんな知りたいときあると思うからメモ どうやるの https://cs.opensource.google/go/go/+/refs/tags/go1.22.0:src/math/const.go;l=40 intSize = 32 << (^uint(0) >> 63) // 32 or 64 どゆこと ^uint(0) >> 63 は全bitたったuintを右に63シフ…

つくって理解するストリーム暗号 ChaCha20

はじめに Go 1.22 で math/rand に ChaCha8 実装が入ったらしい しかも math/rand/v2 トップレベルで利用されてる、かつシードがない math/rand でも使われるようになったらしい。一応議論を追った感じだと、暗号学的強度がある乱数をもとめてるのに math/ra…

2023年の振り返りと来年の抱負

はじめに けっこう遅刻したけど毎年やってたので振り返りちゃんとやるか〜と思い立って書いた。まあ詳細は後述するけど、大きいテーマみたいなのを決めてたんだけどあんまりそれは達成できんかったよという感じでした。 毎年いってるけど一年に1回しかフィー…

LayerXに転職してました

会社で撮影したリニューアル後のロゴ あんまり派手に公開していなかったけどじつは 2023/03/01 からLayerXに転職していました。 入社してから8ヶ月たってるけどまだ会社についての出力を(techblog以外)なにもしてなかったので書くか〜〜となった次第です。 …

放送大学に出願した

はじめに これはポエムであり、人生からするりと抜け落ちてしまったある部分を、社会人になってから回収しようとするアツい男の物語である。 ようは、ぼくはいろいろあって高卒であり、どうしても抑えきれない熱があるので、いまの暮らしを維持できるように…

Go1.20からerrの構造がtreeになるので複数マッチ可能なハンドリングutilを作った

はじめに みなさん Go1.20リリースノート(現在進行中) は読みましたでしょうか? crypto関係のパッケージがmath/big.Intと距離を置きだしたりいろいろ面白そうな話題はあるんですが、なんといっても Wrapping multiple errors が一番気になりました! 関連pr…

grpc-goでモジュラモノリスの境界としてのgRPC利用を考えてみる

はじめに 最近機会があってモジュラモノリスについてあれこれぼんやり考えています。 その性質とかをかるく整理しつつ、モジュール境界としてgRPCをつかってみるアプローチについてあれこれ考えてみます。grpc-goについてのみ考えていて他の言語でどうなるか…

gRPCのメッセージをJSONシリアライズしたい

はじめに 最近こういう記事を書きました convto.hatenablog.com 記事の内容としては、メッセージエンコーディングにはいろいろと種類があり、それぞれ特性があるのでいい感じに使い分けようねみたいな感じでした。 こんな記事を書くくらいなので最近メッセー…

2022年の振り返りと来年の抱負

はじめに 2022年はこういう年にしたいな〜というのは年初にいろいろ考えてたんですが、いろいろ状況が変わってドタバタしたのでほぼ未達成でした。 抱負とかいうやつ、1年に1回だけ目標たててその目標を微調整する機会もないロックンロールな立て付けなので…

json/protobuf(wire)/gobをバイナリ効率とかの観点から比べてみる

はじめに どうも @convto です。 以前に protobufのwire encodingについて遊んた ことや gobについていろいろ仕様を調べて遊んだ こととかがあったので、いっちょいい感じの比較ができるんではということでやっていきたいと思います。 ついでにgobについては…

Goの最近のおもしろCVEとその対応を眺める

はじめに どうもみなさんお世話になってます @convto です。 最近ちらちら直近のGoのCVEとかみてるので、危険度は度外視してパっとみて面白かったCVEとそのパッチの感想みたいなのをまとめつつバージョンアップを啓蒙していきます。 みんなバージョンアップ…

limaつかってdocker環境作るぞ

はじめに あたらしいPCセットアップしてて、せっかくなのでdocker-cli + limaとかでdocker環境整理しようかなーと思い立ちやってみた。 まだガッツリ使い込んでないのでこれから問題でるかもだけど、現状いい感じに利用できているます。 lima is 何 これ git…

gofrs/uuidに出してたパッチがマージされたよ(そしてあとから気づいた細かいパッチをまた出したよ)

Go

はじめに だいぶ前パッチ出した記事書きました。 https://convto.hatenablog.com/entry/2022/06/08/011812 具体的な話はそちらに譲るとして、マージされたんでその話と、関連する修正も出したのでその話をしようと思います。 やりたいこともまだあるにはある…

google sign inでiOS/Androidのclient SDKを使うとnonce指定できなくねという話

はじめに タイトルまんまなんですが困っています。世界の人たちどうしてんの こんばんはconvtoです。故あってgoogle sign inの仕様について調べてたんですが、表題通りの問題を見つけて頭を抱えています。 お客様の中に医師免許を持った有識者の方いらっしゃ…

gobエンコーディング頑張って調べる回

はじめに 以前gobについてどういうところが嬉しいんだっけ?みたいなのをまとめました https://convto.hatenablog.com/entry/2022/05/22/104428 メリットもわかったところであとはバイナリとダンスするだけなので、いくつかに分けてgobと戯れてそのうちしっ…

picoCTF Transformation writeup

CTF

はじめに picoCTF Transformation 解いたのでwriteupかく 自力でやりたい方はここでページを閉じてください 問題 I wonder what this really is... enc というコメントとともに以下のコードが書かれている ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + …

picoCTFでMod 26といた

CTF

はじめに 気になってた picoCTF をはじめてみた 手始めにいくつか問題といたんだけどcryptoの1問め?のMod 26がおもしろかったのでメモ こういうプログラムパズルみたいなのめっちゃ好きなんだよな ちなみにネタバレを含むので自分で解きたい人はブラウザバ…

Go1.19のcrypto/randではunix環境のReadで内部バッファがなくなるので色々しらべた

Go

はじめに 先日なんとなしに go.1.19 release note よんでたら、crypto/randの項目で興味深い一文を見つけた Read no longer buffers random data obtained from the operating system between calls. 当時の僕も気になっていたよう ざっと見たけど crypto/ra…

Genericsをつかってcomparableなpointerの値が等価かどうか判定したいよ〜

Go

はじめに 今回は軽めな回です。 そもそもpointerはcomparebleであり、面倒なことをせずとも == にて比較可能です。 https://go.dev/ref/spec#Comparison_operators Pointer values are comparable. Two pointer values are equal if they point to the same …

gofrs/uuid にパッチをだした

はじめに どうも皆さんconvtoです。 最近UUIDとかをドカっと調べて色々比較するみたいな記事を書きました。 convto.hatenablog.com で、このとき実はつかってるOSSへのcontributionチャンスを発見していて、今回はそのパッチを上げたぞ(マージされるかはわか…

CVE-2021-3538 をちゃんと読む

はじめに CVE-2021-3538 は https://github.com/satori/go.uuid についての脆弱性で、uuidが攻撃者にとって予測可能になる場合があるでというやつです trackerへの登録はこれ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3538 仕事で使ってた…

グローバルなid生成器(UUID v4とか)の比較

はじめに 分散システムやってるとどこからでも安全に採番できる強い衝突耐性をもったuuid的なほげほげidがほしくなります。 世にほげほげidはたくさんありますが、適当にREADMEとかよんでもみんな「これイケてるで!」「uuidとかより文字数すくないで!」「s…

gobのモチベとか、現代的な観点からのメリットとか

はじめに gobのことを最近いろいろ調べてるんですが、そもそもなんでわざわざ言語側でメッセージ用のバイナリエンコーディング持ってるんだっけ?というのが気になったので、自分むけの整理用に使い方眺めつつこういうメリットありそうかなーとかそういうの…

バイナリのbit表現を得られるencodingパッケージ作った

動機 連休中はバイナリとダンスして遊んでたんですが、Goプログラムから柔軟にバイナリをbit表現で出力できないのがちょっと不便でした。 たとえば標準の機能で for i := 0; i < len(src); i++ { fmt.Printf("%08b", src[i]) } のようにすれば、1byteごとにp…

フェイクにならない強い意思

真摯に向き合うこととフェイク こんばんはみなさん。ガチンコしてますか?ぼくはぼちぼちです 突然ですが僕はものを作ったりするのが好きです。そこから転じてものの仕組みを追いかけたりするのも好きです。 興味があって調べてたら思ったより時間つかっちゃ…

go build せずにバイナリをつくって linkname を理解する

Go

概要 なんかいろいろgo tool調べてたら go tool compile と go tool link つかって手動ビルドできそうだったのでやってみるというやつ。 go tool compile するとobject fileなり(オプション指定すれば)archiveつくれたりする。 go tool link すると↑の成果物…

Goのbuiltin/unsafe関数の実装追いかけ方メモ

Go

はじめに Goのbuiltin関数やunsafeパッケージの直接の実装はそれぞれのパッケージには関数とドキュメントしか配置されてません https://pkg.go.dev/unsafe https://pkg.go.dev/builtin これらはアセンブリで実装されているわけでもないです。 じゃあどこでこ…

karatsuba法

はじめに これは RSA完全理解 Advent Calendar 2021 の16日目の記事です。 前回は多倍長整数の四則演算をやりました。乗法は だったので、少し効率の良いアルゴリズムを紹介します karatsuba法 桁数nの整数 があったとします。 これらをそれぞれ ずつに分割…