Welcome!

tex2e

Mako

(tex2e)


フルスクラッチでTLS 1.3プロトコルスタックを自作できるエンジニア (仮)



趣味はプログラミング。暗号技術やプロトコルが好き。お気に入りの言語はPython。ときどきJavaScript。たまにC言語。セキュリティキャンプではRFC読みながらTLS 1.3の鍵共有とパケット暗号化を実装するゼミに参加。学生時代はLinux縛りプレイだったが、会社ではWindows (&古い技術) 縛りプレイをしている。

Skills

好きなプログラミング言語や、資格、活動内容について紹介します。


Languages


Ruby

全てがオブジェクト。Classクラスの親がModuleクラスで、その親がObjectクラスで、さらにその親がBasicObjectクラスで、BasicObjectのシングルトンの親クラスはClassクラスということから、クラスもオブジェクトだと気づかせる唯一の言語。

Elixir

Erlangの癖の強い構文をRuby風にした言語。RubyのメタプログラミングがRailsに活かされたように、Elixirのmacroによるメタプロがあれば次世代のフレームワークがやって来ると思っていたが、人類に関数型言語は早すぎたのだと思っている。

Python

Python2から3への移行に大変苦労した言語。今でもネットの海にはPython2のコードがあり、2to3で変換してみるも、ライブラリがないだの、Python2対応pipがないだの、今なお苦しめられている。頼むからPython2は安らかに眠ってください、と願って止まない。

C#

UnityでC#を使っていたので思い入れのある言語。Windows環境ではC#が素晴らしい、のではなく .NET Framework が偉大なのだと思う。PowerShellから呼び出せる点がとてもよい。PowerShellをよりPowerfulにしている。PowerShell万歳!(C#も万歳!)

Bash

履修すべき言語No.1。Linuxといえば大抵はBash。Bashを笑う者はBashに泣く。コンソール上での自動化の最強の味方。GNU拡張の有無で時々発狂しそうになる (GNU is not Unix)。teeコマンドとtreeコマンドを打ち間違えないようにするのが最近の目標。


Certifications


2019/6/21 情報処理安全確保支援士試験合格 (未登録)
2021/5/2 CompTIA Security+ SY0-501 (2021/5/2-2024/5/2)
2021/6/25 応用情報技術者試験合格

Activities


2017/5 SECCON Beginners 2017 長野 (参加)
2018/3 SECCON Beginners CTF 2018 (参加)
2018/7 Micro Hardening v1.x@長野 2018/07/21 (参加)
2018/8 セキュリティ・キャンプ全国大会2018 X標準ゼミトラック TLS 1.3/暗号ゼミ (参加)
2018/9 情報セキュリティ人材育成事業K-SEC 2018 in 小山高専 (参加)
2018/10 長期インターンシップにて Cyber Range 環境の作成
2019/3 セキュリティキャンプ修了生向けIPAワークショップ「攻防型CTFによるWebオンラインゲームのチート行為の体験 リバイス版」(参加)
2019/8 セキュリティ・キャンプ全国大会2019 X標準ゼミトラック 暗号化通信ゼミ (チューター, LT発表)
  LT発表 : N日でできる! TLS 1.3自作入門
2019/10 ASDoQ (システム開発文書品質研究会) 大会2019 (ポスター発表 審査員特別賞 受賞)
2020/3 Micro Hardening v2 2020/03/21 @オンライン (参加)
2020/10 セキュリティ・キャンプ全国大会2020オンライン L暗号ファジングトラック 暗号解読チャレンジゼミ (チューター, LT発表)
  LT発表 : プロトコルの形式的安全性検証ツール ProVerif
2021/5 Micro Hardening v2 2021/5/4@オンライン (参加)
2021/8 セキュリティ・キャンプ全国大会2021オンライン L暗号数理実装トラック 暗号の脆弱性や攻撃手法を理解して説明しようゼミ (チューター, LT発表)
  LT発表 : マイナンバーカードで署名する
2021/8 Hardening Drivers Conference 2021 - /dev/hardening (参加)
2021/11 Hardening 2021 Active Fault (Team#8参加, 4位/全11チーム, スポンサー(KDL)賞 受賞)
2021/12 社内CTF競技会「LACCON」 (TLS 1.3に関する問題の作問者)
2022/1 WASNight 2022 Kick-Off = OWASP x WASForum Night (Hardening Session 発表者)
  発表資料 : SELinuxで堅牢化する

Works

今まで作ってきた作品や技術検証などのまとめです。 興味・関心分野については 晴耕雨読 をご覧ください。




Ecoris

★View on GitHub★

「Ecoris」は高専3年生の高専祭(工嶺祭)のクラス企画で展示した LeapMotion で行う3Dテトリス。Ecoris は 3Dテトリス + エコ に由来し、手の動きを利用して缶ブロックを潰したり、生ごみブロックを振って小さくしながら遊ぶテトリス。このプログラム(C#)部分を担当し、工嶺祭の「学生会長賞」を勝ち取った。使用環境は Unity + C#

Recursive Tree Renderer

View on GitHub | Visit Website

「Recursive Tree Renderer」は、ランダム性を有する再帰木を描画するツール。作成した再帰木は、背景を無色透明で保存することができる。再描画ごとにランダムな樹形が描かれるので、美形が出るまで何回も描画させたり、各パラメータを変更しつつ遊んでもらえると嬉しいです。使用環境は JavaScript + p5.js

Sutcliffe Pentagons

View on GitHub | Visit Website

「Sutcliffe Pentagons」はサトクリフの五角形を描画するためのツール。ネスト数や半径や角度を変更できるほか、五角形以外の図形を描くことができます。各パラメータを変更しつつ遊んでもらえると嬉しいです。使用環境は JavaScript + p5.js

Nagano Open Data

View on GitHub | Visit Website

「Nagano Open Data」は2015年時点での長野市の保育園の一覧をGoogle Map上に表示するサイト。本来なら色々な施設の情報とかを載せたいと考えていたが、施設の緯度経度を求める必要があるため、データ入力の手間などから長野市の保育園のみを表示させている。使用環境は JavaScript + Google Cloud Platform (Maps API)

ruNNing AWay

★View on GitHub★

「ruNNing AWay」は高専4年生の高専祭(工嶺祭)のクラス企画で展示した LeapMotion で行う、扉を開けまくるゲーム。ゲームデザインはホラー系であるが全く怖くはない。ブラウザで遊べるのが最大の売り。クラスメイトが展示した「落ち魂」と共に、こちらも「学生会長賞」を勝ち取った。使用環境は ES6 + three.js + leapjs

quadratic formula

View on GitHub | Visit Website

「二次方程式の解計算ツール」は二次方程式の解を計算するためのツール。二次方程式の解計算ツールでは、分数・平方根・虚数などの表示がきれいに見えるように MathJax を利用している。使用環境は JavaScript + MathJax

gold-heist

View on GitHub

「Gold Heist」はロボットに見つからずにお宝を手に入れるローグライク・ステルスゲーム。高専4年のプログラミング演習で提出した課題でもある。高専の電気情報科のアピールとして、体験入学の展示にも使われた (2017, 2019の体験入学で展示されたことは確認済み)。使用環境はC言語で OpenGL, GLUT, glpng

rokumoku

View on GitHub

「Rokumoku」は五目並べを拡張した六目並べ(コネクト6)をターミナルで遊べるようにしたもの。サーバ側のプログラムを起動して、クライアント側の接続数が2つになるとゲームが始まる。高専5年のネットワークプログラミングの課題でもあり、@KoiShinとの共同制作。使用環境はC言語で ncurses, socket

color-name

View on GitHub | Visit Website

「色の名は。」は HTML5 で追加された Input Color を使って色を選択し、その色に最も近い色のトップ10の名前を表示する。まだ会ったことのない色を、探しているあなたのために。ブラウザやOSの環境によって Input Color の挙動が異なるので、PC の Firefox からアクセスして遊ぶのがオススメです。使用環境は JavaScript

puzzdemic

View on GitHub | Visit Website

「Puzzdemic」は高専5年生の高専祭(工嶺祭)のクラス企画で展示した、パズルでワクチンを作って世界を救うゲーム。2048というパズルゲームにPandemic (ボードゲーム) の協力型プレイとパンデミック要素を加えたもの。産業フェアの長野高専のブースの展示にも使われた。最新のChrome推奨。キーボードで遊ぶときはWASDと矢印キーを使ってください。使用環境は JavaScript + D3 + イベント駆動

yorusai-entrance

★View on GitHub★

「5031 yorusai entrance」は学生証のバーコードによる夜祭の入場管理と抽選を行うシステム。@nobuyoとの共同制作。工嶺祭(こうれいさい)を数字に置き換えると 5031 になるところが名前の由来である。もともと、学外の人の入場問題と抽選で当選した学籍番号の人が会場にいない問題を解決するために作られた。2017年の工嶺祭夜祭でこのシステムが実際に稼働した。使用環境は Ruby on Rails

nnct-cancel-info

View on GitHub

「NnctClassInfo」は長野高専の補講情報のページから休講・補講情報を取得するAPI群を提供するサービス。以前は休講・補講日の前日になるとメールを送信するようにしていたが、今ではクラスのSlackに休講・補講情報を流すようにしている。私が高専本科を卒業するまで稼働していた。使用環境は Rails + GoogleAppScript + Slack

word-roots

View on GitHub

「word-roots」は英単語の語源を調べるためのコマンド。例えば colloquium(研究会)という単語を見たときに語源 loqu(話す)を発見するのは結構難しいので、それならプログラムで調べようと思って作ったもの。単語によっては間違った語源を抽出してしまうので悪しからず。ツリー構造の様に表示するのはtreeコマンドを自作したとき以来のこだわり。使用環境は Python

latex2pptx

View on GitHub

「latex2pptx」は LaTeX によって作られた PDF スライドと、テキストファイルに書いたノートから、パワーポイントを作成するためのコマンド及び環境のこと。卒業研究発表会ではこれを使って発表に臨んだ。作成した理由は主に、TikZで書いた図をスライドの方でも使い回したかったのと、数式を示す必要があったからである。使用環境は Python + python-pptx + ImageMagick + LaTeX Beamer

multiple-precision

View on GitHub

「Integer」は高専3年のときに多倍長演算の授業で作成したプログラム群。本科卒業前に昔のコードを綺麗にした上で除算アルゴリズムを改良して公開することにした。自宅のパソコンを使ってガウスのarctan系公式で円周率の小数点以下1000桁を求めるのに0.3秒、10000桁を求めるのに2分7秒かかる。もちろんGMPには到底及ばない。使用環境は C言語

lifegame

View on GitHub

「Lifegame」は私が知っている言語でライフゲームを実装したものを集めたレポジトリ。何種類の言語を使えるかを説明するために作っていたが、LaTeXでライフゲームを作ったあたりで既に満足してしまっている。使用言語は c, java, lisp, python, ruby, js, go, perl, php, scala, erlang, elixir, c#, f#, swift, verilog, bash, awk, latex, ...

auto-sushiDA

View on Blog

「Auto-SushiDA」はGUIオートメーションと画像認識と光学文字認識で、タイピングゲーム「寿司打」を自動化したもの。自動化によって聞こえるサウンドエフェクトはとてもリズミカルで心地良い。99皿以上食べるとカウントが00皿に戻るが、スコアには反映されている。使用環境は Python + PyAutoGUI + PyOCR + Tesseract

rfc-translater

View on GitHub | ★Visit Website★

「RFC Translater」はRFCを翻訳するためのツール群と、それによって翻訳したRFCのサイトのこと。原文と翻訳文を並べて読みたいのと、RFCの本文は改行されていて改行を除去した上でGoogle翻訳に渡さないと適切な訳が得られない煩わしさを解決するために作成した。使用環境は Python + Selenium など

rfc-translater-figs

Visit Website

「RFC Figures」はRFC Translaterからの派生物です。アスキーアートはASCIIのみを使って自分の意見や世界観を表現するためのものです。RFCにはアスキーアート職人による作品の数々が散りばめられています。RFCのアスキーアートは文化財だと考えており、これらの文化財を保護する目的でサイトを作成しました。

AHKManager

View on GitHub

「AHK Manager」は作業の一部を自動化するために作成したツール。特定の作業(データ入力やテストなど)をするときだけAHKのショートカットを有効にできて、AHKファイルを修正しないでショートカットの割り当てを変更できればいいな、という訳で自分のために作ったもの。使用環境は AutoHotkey

REPO

View on GitHub | Visit Website

「Reverse Shell Generator」はペネトレーションテストでリバースシェル接続をするときに、環境によって待ち受けIPとPortを変える手間と、侵入先の環境にインストールされているコマンドがわからない状態で全てのコマンドを試す手間を省くために作ったもの。使用環境は JavaScript

Miscellaneous


技術系ブログ (Jekyll + GitHub Pages) 晴耕雨読
コード内コメント検索サイト Search Comments | GitHub
ブラウザでテキストエディタ BrowserEditor | GitHub
英和和英辞典として使えるアプリ (Electron + AngularJS) ejjedict
LaTeX 文章の構造を解析し、JSON 形式に変換するプログラム yalp
レポート提出時のLaTeXの構造や内容をチェックするツール latex-test
MeCabのElixir向けバインディング mecab-elixir
MacOS向け改良(改造)版のStegsolve stegsolve-macos
マルコフ連鎖による文章の自動生成 markov-chain-sentence-generator
OpenCVでサイゼリアの間違い探しを解くツール saizeriya-spot-the-difference
研究室の自動開錠システムに関するプログラム群 auto-door-unlock | 解説記事
TLS 1.3のPython実装 (鍵共有とパケット暗号化のみ) mako-tls13
楕円曲線のCurve25519とCurve448を使ったDiffie-Hellman鍵交換のPython実装 elliptic-curves
AEAD暗号のChaCha20-Poly1305のPython実装 chacha20-poly1305 | 解説記事
NewHope (RingLWE問題) 解説記事
耐量子計算機暗号である(Ring-)LWEによる鍵共有 LWE解説記事 | Ring-LWE解説記事
ルービックキューブを使った暗号系のPython実装 Rubik's-Crypto-Cube
WPA3の技術調査とProVerifによるWPA3プロトコルの検証 WPA3解説記事 | 形式的安全性検証解説記事
C言語によるAESの実装とMixColumnsの解説 AES実装 | MixColumns解説記事
ヴェイユペアリングとその応用 Weil-Pairing解説記事
加法準同型暗号による電子投票 Paillier暗号と電子投票の解説記事
WebAssemblyでC言語で実装したAES暗号を動かす webassembly-aes
数字認識モデルと数独ソルバーを組み合わせたツール sudoku-solver-with-opencv
ユーザ認証付きチャット (WebSocket + OAuth 2.0 + Golang) test-server-oauth2
過去問道場のサイトで広告ブロック検知を回避しつつ広告を非表示にするChrome拡張 my-ad-blocker (非公開)
マイナンバーカードとAPDUで通信して署名データ作成 解説記事

Learned Languages


今まで勉強したことがある言語の一覧を散布図で表しました。横軸が開発スピードを、縦軸が好みの度合いを、円の大きさは言語の使用頻度を表しています。全て主観的な判定基準に基づいています。


Contact


GitHub Twitter