真の鯖レスWebシステムをWebRTCで(金の切れ目が縁の切れ目にならないシステムへ)

やあ (´・ω・`) ようこそ、セルフまとめへ。 このテキーラはサービスだから、まず飲んで落ち着いて欲しい。 うん、「また」なんだ。済まない。 仏の顔もって言うしね、謝って許してもらおうとも思っていない。 でも、このまとめタイトルを見たとき、君は、きっと言葉では言い表せない 「ときめき」みたいなものを感じてくれたと思う。 続きを読む
3
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

真のサーバレスに、システムとしてフルクライアントサイドオンリーで構成されるインターネットシステムが要求されている!(当脳内妄想比) まあ自分でXamppなりElectronなりでマルチプラットフォームにやればいい。でもそれはWinやMac等のプロプライエタリ環境込みで野良アプリを入れられる場合での話

2018-09-30 09:41:17
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

しかし、iOSやアンヨヨイヨではどうする?ストアの申請には真名が必要だし、ストアには審査というものが有る。審査はクレカ会社の意向も挟まって、現状ですらいろいろなくなってしまっている、自由というやつが。この世界の個人所有計算機の最高峰に位置するスマホを取り込みたい。ならばどうする?

2018-09-30 10:06:45
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

WebRTCの手動シグナリングという手管が存在することが分かった。すごい・・・これはシグナリングサーバー要らなくね?という話。内容確認はこれからだが、手動でできるということは、認証方法伝達がコピペでよいことになり、QRコードとかNFCとかWebUSBとかでもよいことに成るわけで真の鯖レスが可能に

2018-10-05 22:52:06
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

やりたいことは、AとBのスマホを連携させたいという要望なのでWebRTCのシグナリング情報を互いにQRコードを表示して認証してしまえば鯖なしでWebアプリが通信可能に成る。問題はNAT超えができるのか・・・これがなー問題なんだよな・・・

2018-10-05 22:54:46
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

ソフトがWeb経由でやってくる。複数のマシンが1ネットワークで繋がっていれば、Web経由でやってきたソフトが連携できる。重要なのはソフトを配布するサーバーのみが存在し、サーバー側にストレージも演算処理も何もかも要らないということ。もちろん、自動化出来ない。のはちょっとあれだが、考えよう

2018-10-05 22:58:36
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

WebRTCがシグナリングさえ手でやれば、あとは通信できるっぽい情報を手に入れた。 html5experts.jp/mganeko/19814/ 手動で出来るなら、鯖要らないよね!ヒャッホーう!

2018-10-05 23:05:38
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

なるほど、文字列交換だけで行ける。ということは、一旦バイナリに変換して暗号化したあとzipで固めてbase64URIにしたあと、QueryStringに放り込めば(・∀・)イイ!!。その前に証明書の交換までやっておくと尚よい。で、それをTwitterなりなんなりで交換するといいと。

2018-10-06 02:27:53
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

状況としては ・WebRTCの接続自体で防ぐ →SDP情報自体を解読させない。問題は鍵をどうするか・・・。情報自体はオープンでもいいようにしたい ・WebRTCの接続後認証する →相手にIPアドレスとポート番号がバレてヤバイ。物理的脅威が増す。其れ以上にセッション維持コストが高く、DDoSが成立する。

2018-10-06 02:37:31
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

SDP情報をオープンにする場合、各マシンに事前に鍵を配って、暗号化されたキー情報を複合できるようにしておく必要が有る。鍵自体はまあIndexddbにでも放り込んでおけばいいが、結局同じ動作を2回やる必要が有る。 1回目は鍵の配布、2回目はSDP情報の交換。このオペレーションはどうすれば・・・

2018-10-06 02:46:58
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

理想の運用状況はどんなのだろうか。結局AとBを繋ぎたいです!と言った瞬間に、繋がる。に尽きるわけなんだけど、じゃあ其れを実現するにはどうするか?シグナリング鯖に訪ねて答えをもらうに帰着する。でもその鯖すら排除したい。理由は真名の提供強要と金の切れ目が縁の切れ目だからだ。

2018-10-06 02:57:32
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

なので、手順はやはり、AとBを繋ぎたいです。じゃあAさんにBさんの情報を手で渡してください。えー?まあエスクローサービスがないからしょうがないね。あーなるほど、エスクローサービスがあれば良いのか・・・CORSで投稿できて、CORSでデータ取れる奴。もっと野蛮な奴でもいいけど。

2018-10-06 03:10:45
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

え?それクラウドじゃね?そう頭の良い諸兄にはお分かりいただけると思うが、当にクラウドなのである。まあAWSのS3だったらまあいいか感はある。一応何でも置かれると都合よく物置にされるのでLambdaで暗号化やバリデーションをかけて旨味を削ぎ落とさないとダメだけど。

2018-10-06 03:31:03
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

問題は、そのクラウドを利用する権利、場所がチョーク・ポイントに成るということ。真の鯖レスとは言えない。しかし、根本的な問題としてWebRTCの再接続に際しては必ずSDP情報の交換が必要で、そこ人力に頼ると辛いという現実。うーん。どうしようか。クラウドを使っても良いんだが・・・

2018-10-06 19:21:47
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

なるほど・・・GoogleSpreadSheetを使うという手も有るな・・・GoogleSpreadSheetにアプリを公開すると外部とのデータやり取りが可能になるとなると。うーん

2018-10-06 20:06:14
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

こう、緩慢なサービスで良いんだ、テキストオンリーで通信できる奴、ただし、クロスドメインで。速度が出せるなら01でも良いんだけど。うーん・・・スマホとPCを連携させる方法がなぁー。いやスマホ同士なら方法は有る。あいつらカメラついてるからQRコードで送ればいい。若しくはスピーカーでピゴロロ

2018-10-06 20:17:45
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

じゃあ、目標は決まった。 ①鯖レスWebRTC接続を作る。 ②方法はQRコード。もちろんブラウザ、jsオンリー、拡張無しで成立させる。 ③QRコードが外部に漏洩しても接続できないように暗号化情報のみをもたせる。 ④鍵の交換は事前に終わらせておく方法で。

2018-10-06 20:47:45
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

このSPD情報の交換手段なんだが一方でPCは其れがない。まあQRコードをダウンロード、アップロードすればいいんですけどね。Twitterぐらいの交換性があれば良いんだけどねぇ。CORSでの不特定多数との情報交換が可能なサービスが鍵なんだ。まあGoogleSSとかAWS使えばできるけど本質的ではないので放置

2018-10-06 20:49:14
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

事前に交換される鍵なんだけどあんまりこまいことは出来ない、ニンゲンダモノ。 なので、これもジェネレーターでQRコードを生成して渡すのが正解なのかもしれない。これは外に公開してはいけない。実際はこれにパスフレーズをつけるところか。パスフレーズは流石に入れられる(※公開するなら)

2018-10-06 21:00:13
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

QRコードは最高画質で2.9KBか・・・Cookieより少ないのな。まあいいや。きっと其れぐらいのサイズで行ける。行けると信じて。シード情報がアプリを初めて使った時間+キーを作った時間+アプリキー+アプリのドメイン+作ったマシンのUA+パスフレーズ、これをハッシュしまくって、パスフレーズで鍵を

2018-10-06 21:36:41
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

でSDP情報を抽出し、暗号化する際にこれを鍵として使用する。共通鍵方式だから大丈夫。お漏らしすると赤の他人がWebRTCのチャンネルにコンニチワしてきますと。もちろん其れだと面倒なので、マジで繋いでいい?という確認画面でUAと接続機器名は表示して目検認証はさせる。

2018-10-06 21:41:02
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

で、まあ鍵が有効な鍵かはわからないので、オメーの鍵ハッシュで送って見ろよチェックをして、現在使っている共通鍵と同じハッシュなのか確認をすると。そうすると漏洩鍵でアクセスしてきた奴は弾けるはず。あとはSDP情報の鮮度を設定して30分だけ有効にするとかやれば大丈夫か。

2018-10-06 21:43:30
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

QRコードで受け取ったSDP情報は暗号化されており、共通鍵のハッシュと一緒に格納されていると。手元の有効な共通鍵で中身を展開。ハッシュを付きあわせてOKか確認する。まあOKなんだが、偽造品は忘れるという失態を期待する。で、SDP情報の接続を開始すると。 多分端末名をユーザに入れてもらうのが吉

2018-10-06 22:00:35
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

「774さん」をデフォにしてこれを共通鍵ハッシュの代わりに暗号化ペイロードに入れれば、鍵が流出しても情報が不足する?うーん?やっぱり共通鍵だけじゃなくて初回WebRTC通信が確立したら、そのあとは2要素認証とか公開鍵暗号を認証に使うようにすべきだなぁそうすると偽造はできなく、警告を出せる

2018-10-06 22:04:38
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

オプションを設けて暗号化を2重にしてパスフレーズをかけられるようにしておけば、SDP情報を受け取った先でPINコードなり、パスフレーズなりを入力させて認証という手は使えるね。面倒くささは100倍だがまあ鍵自体はオープンに渡せるのは便利だと思う。

2018-10-06 23:46:20
汝、翼を与える@ばってん先に翼ばくれんね イベント・・(parody) @ryunosinfx

端末に設定した名前も現在接続している先として表示できていれば怪しい奴が居たら接続解除できるようにしたら良いのでやはり重要だなって思うわけです。ただ、長すぎるのはどうだろうか・・・いっそQRコードにしてしまうか・・・

2018-10-06 23:48:53