投稿

Java API for JSON Processing,JSONBと比較してみた

ABNFパーサを作ったおまけでてきとーにRFCだけ見てなんとなく作ったJSON実装(SoftLibJSON)がどれくらいJava標準(Java API for JSON Processing と JSONB)に近いのかなと思い、比較してみた。 結果、一応元のRFCがあるのでほぼそっくりではあるのだけど、微妙に違うのでそのあたりの解説と、今後どうするのかとか。   Java API for JSON Processing SoftLibJSON   TEXTぱーす   どこか JSON.parse()                   JSON TEXT化   JSONValue.toString()    Object→JSON   JSONValue.valueOf()    JSON→Object   JSONValue.map()    値 JsonValue JSONValue         NULL JsonValue.NULL JSONNULL    true JsonValue.TRUE JSONBoolean    false JsonValue.FALSE JSONBoolean    数値 JsonNumber JSONNumber    配列 JsonArray JSONArray    構造体 JsonObject JSONObject   こうしてみると、JsonValue からの継承関係はだいたいおなじ。JsonArrayはList,JsonObjectはMapを継承するのに対して、SoftLibJSONではJSON Pointerに対応するための機能も埋め込んだため、JSONArrayとJSONObjectではJSONCollectionとしてまとめたものを継承しているのが違い。 値の取り出し方はJava APIの方が型変換の呪縛でいろいろ...

HMACと暗号の実装

ハッシュを作ったので次はHMACなど作ってみた。 HMACはハッシュを使ってパスワード認証的なものもつけているので改変されていないかなどで有利なのかどうなのか。JavaではMacという分類のあれこれ。 ハッシュごとのハッシュ長は取得できてもブロック長やら何やらを取得するのがJavaの標準APIにはなさそうなので自作ハッシュではそのあたりも拡張しておく。 HMACに適当なハッシュを載せられるので、MD2とか対応してなさそうなのをあわせてみてもいいし、SHA-3ではべつのアルゴリズムKMACを使うようだけどもHMACでも問題なく対応しているし、仕様にもあるはず。 JDKにはまだHMAC-SHA3とかなかったかも。 HMAC-MD5とか、HMAC-SHA-256とかいろいろできるので広がる。 ただ、暗号という位置づけなのか、何もしないとHMACなどMac系のアルゴリズムはJavaに登録できない感じだったので、署名などつけないといけないのかもしれず、暗号だけのライブラリには分けてみたけど署名を試すのはまた次回。 登録しなくても、自作すればどうにでも使えるので動作は問題ない。 他にもMac系のものがあるようなので、KMacとか作ってみる予定は未定。SHA-3と別の資料なのでまた読むのが大変。 暗号 作る予定ではなかったかもしれないけど、ハッシュをいろいろ作ってみた勢いで暗号にも手を出してしまった。 詳細ではなくどんなのがあるかくらいのメモでいいかな? ブロック暗号、ストリーム暗号 暗号の基本、大まかにはブロック単位の暗号と、バイト単位でデータと(疑似)乱数をXORで暗号を作るストリーム暗号とがある。他のもあるが、大量のデータを暗号化するにはこのふたつかな。よく使われるのはブロック暗号なのかどうか。ブロック暗号も組み合わせ方によってはストリーム暗号として使うこともできる。逆にストリーム暗号の長さを固定してブロック暗号として使えるのか、というと使える、がビット反転では弱くないのか謎。暗号強度に差が出る場合があるのでそれぞれのアルゴリズムで判断した方がいいかもしれない。 ブロック暗号もストリーム暗号もJavaのストリームとして使えるようにしておくと便利なのかもしれないので基本の部分は共通の設計にしておこう。 ストリーム暗号ではXORするだけなので...

Logicool UnifyingレシーバとUSB3電波干渉

Logicoolのワイヤレスマウスやキーボードは、USBのUnifyingとかいうコンパクトワイヤレスアダプタでPCと繋がっていい感じなのだが、USB3.xとは相性が悪く、隣の端子に(M.2型の)SSDを繋いだところ、ログイン後キーボードマウスが動かなくなってしまう現象に遭遇してしまった。 対処方法は、USB端子を離すこと、Bluetoothを使うこと。 最近のキーボード、マウスはBluetooth LEにも対応しているのでBluetoothにしてみるのがひとつの解決策。 Bluetoothにするとマザーボードの設定ができなくなったりするので可能ならUSB3とUnifyingのレシーバを離して繋ぐのがいいのかも。

4Kディスプレイのススメ

4K UHD Blu-rayなどを見るためにディスプレイを探していたのだけど、HDR対応で探してみるとあまり明るそうなものがなく、と数カ月様子見していたかもしれない。 24型くらいのJAPANNEXTの4Kディスプレイは購入してみたことはあったがHDR対応でもなく、小さすぎるので4Kっぽくもなく。 ディスプレイでHDRというとDisplayHDRという規格があるのでその中から候補を出してみた。 31.5インチ、DisplayHDR 600、というとわりと高級機で10万、30万という値段のものまであるようなないような。 以前50インチのPHILIPSのDisplayHDR1000のディスプレイを見たときは、ドットが崩れすぎてPCでは使えないなと感じてたのでPHILIPSも除外。 ASUSもDisplayHDR1400とかいう変態機を出していたが高すぎるだろうということでよくあるディスプレイの300nit(cd/㎡)越えはほしいのでDisplayHDR 600あたりを漂っていると、Acerの型番が難しそうな機種(ET322QKCbmiipzx)が5万円という破格で出てきた。1年前の機種ということなのでそれほど古くもなく、4KでHDRでDisplayHDR 600もある。ただし標準の輝度は400cd/㎡。 DisplayHDR 600の規格の方をよく見てみると、わりとプロ向け仕様になっていて色域も広い、10bit対応などとあり。 古い機種なのか人気なのか、在庫のある店があまりないのでポイントがつきそうなところで予約。au Payとかは使わなかったけど。1週間から2週間ぐらいで届いたように思う。 型番は類似品があるのでシリーズはET2、DisplayHDR600対応とET322QKC という頭の型番の最後にCがつくのを確認しよう。 開封設置 だいたい32型。今までのより大きい。ディスプレイとして使うなら4Kでは最適な最小サイズかもしれない。Windowsのテキストが100%でも読める。テレビだともう少し大きい方がいい。 足は細いので、物の上など平らな場所にちょっと置くことはできず、それなりのスペースを取る。謎の5cmぐらいの棒が1つついてきたがケーブルでも垂らすものなのか謎。 DisplayPort 1.2 1つとHDMI 2.0が2つ、音声出力...

ASUS RT-AX3000買ってメッシュWi-Fiの入り口へ

定評のないASUSルータ、その原因はセキュリティアプリにありそうなのだが、というわけでAmazon専売らしいASUS RT-AX3000購入してみたので、いろいろお試し期間。 今回の組み合わせ (Wi-Fi 6 802.11ax) Intel AX200NGW ASUS RT-AX3000 他ルータ (Wi-Fi 5 802.11ac) BUFFALO WSR-2533DHP2 IODATA WN-AC1600DGR2か3か Wi-Fi 6は802.11ax の高速なWi-Fi規格。デスクトップPCにIntelの拡張カードAX200NGWを載せてみているので、ルータ側を変えるタイミングを窺っていたら1年ぐらい経過していた。ASUSからWi-Fi 6対応で安価なRT-AX92Uよりさらに安いRT-AX3000が出たので購入。5GHz帯が2ストリーム(4804+800)から1ストリーム(2402)に減っている、アンテナ2本なので2402Mbpsという差がある。有線LAN/WANも1Gpbsに落ちる。 CPUなどの性能は同じくらいのようだ。とりあえず1Gbps以上の性能はまだ必要ないと思うところなので、必要になればAiMeshのサブ機にするくらいの買いやすさで購入。 RT-AX92Uから強化されている点はWPA3対応か。AiMeshでは全ルータが対応しているっぽいWPA2しか使えないが。 メッシュWi-Fiとローミングの違い Wi-Fi 6に加え、今流行りのメッシュWi-Fiに対応している、という点が今回の要点。今回安定していれば次は強めのルータを買って2台でメッシュ、というお試しができるかもしれないのがよさそうなところ。 用語 ルータ 外部とも有線と無線とも繋がる機器 AP (Wi-Fi AP) Wi-Fiと有線LANと繋ぐ機能だけ使っている状態 中継器 Wi-FiをWi-Fiに繋ぐ中継をするもの  どれもAPの機能は持っている感じの括り。 子機が途切れずAPをまたいで繋がるのがローミング、それに加えてルータ/AP/中継器間を自動で中継してくれるのがメッシュWi-Fi、 という違いがあるのでどちらを使いたいのか把握しよう。ローミングだけのはあんまりないけども。 ローミングにも対応していない場合は電波がぎり...

暗号アルゴリズムのなかのハッシュを実装してみる MD5からSHA-3まで

デジタルな暗号の実装はいろいろあるのだけど、中身はあまり把握していないなということで、暗号やハッシュの実装を見てみようと思いいくつか実装してみた。  暗号の中でも使われていることもあり、実装が簡単そうなのがハッシュ関数というわけなのか、最初に目についたからかハッシュのMD4、MD5からSHA-1、SHA-2、SHA-3を実装してみた。GitHubに公開してみたが、結局他の実装はあまり見なかったかもしれない。 入門程度に詳細は省略するのでソースかWikipediaでも見てもらえればハッシュの単純さがわかる。 ハッシュとは、データの固まりに固有の番号(乱数っぽいもの)を生成するアルゴリズムで、ダウンロードしたデータが正確かどうか判定するために使ってみたりする。 昔はチェックサムだとか、CRCだとかがあったところの延長線上でもあり。 結果が分散している、結果からデータを逆に辿れないというのもポイント。 構造は、入力データを512ビットや1024ビット毎に区切り、ビット演算を繰り返した結果256ビットくらいの結果が出力される。 1ビットの違いが出力のほぼ全ビットに影響するので同じ値を探すのも難しい。 入門レベルで書かれているものでは、1回の暗号の構造については書かれているが、初期値がどうなるとか繰り返しがどこからどこまでででどうなるのかなど、よくわからないことも多々ある。 実装するには、基本的にインターネット関連の情報はRFCを読めば見つかる。MD4、MD5などの廃止された古いものもしっかり残っているのはRFCのよいところ。SHA-3はまだRFCにはなさそうだ。日本語化されたものもIPAなどのサイトで見つかるかもしれない。 RFC 1319 MD2 RFC 1320 MD4 RFC 1321 MD5 RFC 3174,FIPS 180-1 SHA-1 RFC 6234,FIPS PUB 180-4 SHA-2, HMAC,HKDF FIPS PUB 202 SHA-3 ハッシュの基本 SHA-2までとSHA-3では違うので別々に。 内部状態を持っている MD5の場合 32bit a,b,c,d で128bit、SHA2-256はa,b,c,d,e,f,g,hで256bit、SHA2-512では64bitの8つで1024...

RaspberryPi 4 Model B 日本発売

RaspberryPi 4 Model B 4GBモデルがKSYから発売された。 今回の製造はOkdo社、RSコンポーネント関連の企業らしい。 電源、ケースなどのセットモデルもあるが、2GB、1GBモデルは未定となっている。 その他の取り扱いがありそうなショップはスイッチサイエンス、ヨドバシカメラ、などがあるが、予約はまだはじまっていない。 告知ページ https://raspberry-pi.ksyic.com/news/page/nwp.id/86 KEY Twitter https://twitter.com/ksy_raspi_shop/ RSコンポーネント Twitter https://twitter.com/RSJapanMK スイッチサイエンス https://www.switch-science.com/ セットなどで購入しておきたいものは、電源、4B対応ケース、microSD(XC)、microHDMIケーブルが主なところ。 microSD、キーボード、マウスなども必要。LANケーブルもあるといい。 電源は現在販売中の4Bは問題ありなのでUSB PD GaNで18W以上 + USB 2.0 Type-C ケーブルがおすすめなのか。GaNなUSB PDで変換効率はどれくらいなのかも気になる。 発熱の問題も深刻なようなのでヒートシンクもおすすめらしい。つけないけど。 3B以上対応のもので試してみたいのはWebThingsのMozillaのなど。 それ以外はいつもどおりのサーバ用途かもしれないが、メモリがあるのでデスクトップ用途でもつかえなくはないのかもしれない。 2台くらい買ってみる予定でUSB PDとUSBケーブル、microSDなどを注文してしまうが本体は買えなかった。