映画に出てくるラテン系は大体いい奴
マイケルペーニャとジョンレグイザモ
Arduino R4 MINIMA のハードウェア乱数生成器を使ってみる
概要 Arduino では開放状態のアナログ入力端子を読み取って乱数を生成するというのがしばしば行われるようです。 A/Dコンバータのノイズを拾って乱数を生成するのも電子工作ならではといった感じで面白そうですが、 Arduino R4 を持っているので、R4 ならではの機能を使って真乱数を生成してみようと思います。 Arduino R4 に搭載されている Renesas RA4M1 (R7FA4M1AB3CFM) には SCE5 という暗号化エンジンが搭載されており、TRNG (ハードウェア乱数生成器)が提供されているので、これを使ってみます。 SCE5 について SCE5 は Renesas が開発した暗号化アクセラレータです。AESによる暗号化・復号と、128ビットの真乱数生成器 (TRNG) をサポートしています。 仕様は以下の通り。 アクセス制御 暗号エンジン: AES キーサイズ: 128bit, 256bit 暗号利用モード ECB, CBC, CTR (NIST SP 800-38A 準拠) GCM (NIST SP 800-38D 準拠) XTS (NIST SP 800-38E 準拠) GCTR 認証付き暗号: AES-GCM キー管理 乱数の生成: 32ビットの真乱数生成器 ユニークID 低消費電力: モジュールストップ状態の設定が可能 出典: https://www.renesas.com/jp/ja/document/mah/renesas-ra4m1-group-users-manual-hardware?r=1054146 AES も今度試してみたい。 使い方を調べる マニュアルには上記の仕様やブロック図などが記載されているのですが詳しい使い方の説明はありません。 とりあえず SCE5 はデフォルトだと無効化されているので、有効化する必要があるということはマニュアルから読み取れました(それだけ・・・)。 ということで、マニュアルはそっ閉じしていくつか手掛かりになりそうなサイトを見てまわりました。...
RaspberryPi2用のRTCもどきを作る
Raspberry Pi2にはRTCがありませんが、これによって再起動したときに時刻が 2017年1月1日 とかになります。 システム時刻が現在時刻とかけ離れている場合、ラズパイを再起動した後はしばらく上記の古い時刻で動いています。 そこで、再起動する直前の時刻時刻をファイルに書き出しておき、再起動後にセットすることで1分程度の差に抑えることができないか試してみました。 https://github.com/dozen/myrtc Raspberry Pi2にはArchlinuxを入れているので、systemdで使えるようにしました。 設定方法 myrtc を /usr/local/myrtc/ に置いて、 myrtc.service を /etc/systemd/system/ に置きます。 /usr/local/myrtc/myrtc store で現在時刻をファイルに保存し、 /usr/local/myrtc/myrtc restore でファイルに書き出した時刻をシステム時刻にセットします。 restore にはroot権限が必要です。 myrtc.service はonshotタイプのサービスで、start時にrestoreコマンドを実行し、stop時にstoreコマンドを実行することで、起動時にrestore、シャットダウン時にstoreを実行できるようにしています。 感想 再起動にかかる時間は考慮されていないので、myrtcでセットし直した時刻は、私のRaspberry Pi2でだいたい30秒くらい遅れます。storeかrestoreどちらかでその間に進む時刻を大体で加算すればもっと誤差が小さくなりそうですが、NTPで同期できればそれでいいので、ややこしいことはしていません。 もし不慮のシャットダウンなども考慮したい場合は、cronでmyrtc storeを定期的に実行するか、 myrtcコマンドを書き換えて無限ループの中でスリープを挟みながら時刻をファイルに書き出し続ける、みたいにすればいい感じになりそうです。 もし後者のmyrtcを書き換えるパターンを実践する場合は、 myrtc.service を書き換える必要がありますね。 tinker panic 0とすればどんなに時刻がずれていても同期してくれるので、正直こんな物はいらない… 🐘
systemd-modules-loadがコケる
bcm2708-rngはラズパイのハードウェア乱数生成器を使用するためのカーネルモジュールですが、それが読み込めて無くて systemd-modules-load.serviceがコケていました。 ● systemd-modules-load.service - Load Kernel Modules Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2017-02-01 10:11:51 JST; 20s ago Docs: man:systemd-modules-load.service(8) man:modules-load.d(5) Process: 850 ExecStart=/usr/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE) Main PID: 850 (code=exited, status=1/FAILURE) 2月 01 10:11:51 pi systemd[1]: Starting Load Kernel Modules... 2月 01 10:11:51 pi systemd-modules-load[850]: Failed to find module 'bcm2708-rng' 2月 01 10:11:51 pi systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE 2月 01 10:11:51 pi systemd[1]: Failed to start Load Kernel Modules....
Shell ScriptでCGIカウンターを作る
CGIカウンターとか懐かしくないですか? #!/bin/sh file="count.log" lockfile="counter.lock" sleeptime=0 while : do #ロック mktemp $lockfile 1> /dev/null 2>/dev/null result=$? #ロック出来てたらカウンタを進める if [ $result -eq 0 ]; then count=$((`cat $file` + 1)) echo $count > count.log #ロック開放 rm $lockfile break fi sleeptime=$(($sleeptime + 1)) sleep "0.00"$sleeptime done echo $count count.log というファイルを置いておけばカウンタとして動作します.ロックには mktemp を使いましたが mkdir とかでもいいはず. ロックされてたら一定時間待つようにしていますが,ちょっと手抜きすぎるかも. 🐘