はてなキーワード: パスフレーズとは
千葉運転免許センターで免許の更新を行い、マイナ免許証に切り替えた。
免許センターに入る前から入口に日本語と中国語のみで注意書きがある。「免許手続き以外の方は駐車禁止」と。
ストリートビューの履歴を見ると2021年から中国語が追加された模様。千葉県警の苦慮が伺える。
外面切り替えが2025/10から厳格化されたとのことだったが、外面切り替えの窓口は大盛況(に見えた。以前はもっとだったのかもしれない)。自分の予約時間まで間があったので外面切り替え窓口近くのベンチに座ってると、どうやら外面切り替えの人たちは名前を呼ばれる際に国名もセットで呼ばれる
(ベトナムの〇〇さんー、中国の◇◇さんーとか)ようで、しばらく座ってるとその時間帯は中国、ベトナム、ネパールの人が多目に感じた。
受付時間が来たので予約のQRコードを読み取り機にかざすと、マイナンバーの4桁の数字の利用者証明用暗証番号の入力を求められるのだが、お年寄りに配慮しているのか、画面にデカデカと押下した番号が黄色く光り、後ろに並んでいると4桁なんてはっきりと見えてしまう。
この後あちこちの窓口に提出する受付表が印刷されるのだが、この受付表にもデカデカとマイナンバーカードの4桁の暗証番号が記載されていて、その後費用の支払や視力検査、写真撮影等並んでいる間にも周囲も、周囲からも暗証番号見えた状態でいるのが不安でその部分を親指で隠していた。
また、最後まで使い道が無かったが、受付表と同時に「暗証番号カード」なるレシート用紙も印刷され、これにもデカデカと4桁の暗証番号が印字されているのである。
千葉運転免許センターと言えば、今年の9月の講習の際に「外国人は映像を見るだけでいい。日本人は真面目に聞くように」の発言があったとして話題になっていたが、是正されたのか優良運転者講習だったからなのか、そういった発言は無く、普通に30分の講習は終わった。
1. 運転免許のみ
の3パターンから選べて、それぞれに講習後の受け取り方法が違うのだが、私は 2. マイナ免許のみ のため、マイナンバーカードに免許情報を書き込む手続きをするための窓口に並んだ。
窓口では多くの人が並んでおり、一部で揉めているようなので話を聞くと、ネットワーク障害が発生していて手続きが始められないとのこと。後に予定が控えているという男性は困っているようだったが、職員の方も困っているようだった。
復旧までの間にラミネート加工された手続き説明の冊子を回し読みするよう配られたのだが、近くにいた外国人の女性が「ニホンゴヨメナイカライラナイ!」と大きな声で言っており、「日本語読めなくてもマイナンバーカードって持てるのか」と調べてみたら3か月の滞在許可があれば持てるようだった。
何となく日本国籍が必要なんだろうと思っていたが、思っていたよりは所持ハードルは低いものだった。
ちにみにその女性は、隣に座った親切な日本人女性に手続き説明冊子を読み聞かせてもらっていた。
ネットワークが復旧し、手続きが始まったがやたらと進みが遅く、窓口を見ていると、ここではマイナンバーカードの4桁の利用者証明用暗証番号ではなく、6桁~16桁の英数字の署名用暗証番号が必要で、その暗証番号が解らず詰まる人が大量に居て、手続きに時間がかかっている模様。
ラミネート加工の手続き説明冊子にも記載があったし、窓口のそばで延々と音声でもその旨をループ再生で説明されているのになぜ・・とも思うがこれを毎日一日中対応している職員は慣れているようで「ダメなら後日手続きできる」旨を伝えて次に行こうとするも、粘る運転者・・「次間違えるとロックされますよー」と言って諦めさせる職員といった攻防が見られた。
マイナ認証アプリなどで署名用暗証番号入力できた人から手続きさせるようにすればどちらもずいぶん楽に、早くなるのではないかと思った。
ただ、この署名用暗証番号の窓口での入力も気になるところで、Surfaceのようなものを使うのだが、最初の受付同様、お年寄りへの配慮なのか、どデカいソフトウェアキーボードで、タッチした箇所が黄色くビカビカ光るのと、周囲から丸見えな場所で打つためとても気になる。
職員もガン見しているのも気になる。飲食店や小売店のレジでクレカの暗証番号入力するとき、店員は明後日の方向を向いたり、後ろを向いたりと配慮してくれるものだが、千葉県警ではそういった配慮は無いようである。
警察官なんだから安心しろ・・ということなのだろうか。たとえ悪用されなかったとしても、ちょっと恥ずかしいパスフレーズを使っている私などはあまり見られたくないのである。ちょっと恥ずかしいので。
だらだらと雑に書いたが、とにかくマイナンバーカードの暗証番号についての扱いが雑過ぎるのではないかという部分が気になった一日だった。
グローバル化が進み、日本とは大きく違った文化で育った方も多くいる今の日本で、性善説を基に秘匿性の高い暗証番号を雑に扱うことは見直すべきではないかと思う。
一度投稿したうえで別タブを開いてプログラム的(fetch)に送信してその別タブが閉じられる仕組み。
// ==UserScript==
// @name PGP未署名検出と別タブ自動編集
// @namespace http://tampermonkey.net/
// @version 1.0
// @description PGP署名がない投稿を自動編集ページへ誘導
// @match https://anond.hatelabo.jp/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM.openInTab
// ==/UserScript==
(function () {
'use strict';
const body = document.getElementById('entry-page');
if (!body) return;
const titleText = document.title;
if (!titleText.includes('dorawii')) return;
const pgpRegex = /BEGIN.*PGP(?: SIGNED MESSAGE| SIGNATURE)?/;
const preElements = document.querySelectorAll('div.body pre');
let hasPgpSignature = false;
for (const pre of preElements) {
if (pgpRegex.test(pre.textContent)) {
hasPgpSignature = true;
break;
}
}
if (hasPgpSignature) return;
const editLink = document.querySelector('a.edit');
const childTab = GM.openInTab(editLink.href, { active: false, insert: true, setParent: true });
})();
// ==UserScript==
// @name 編集ページ処理と自動送信・閉じ
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 編集ページで署名処理と送信、タブ自動閉じ
// @match https://anond.hatelabo.jp/dorawii_31/edit?id=*
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @grant GM_notification
// @connect localhost
// ==/UserScript==
(async function () {
'use strict';
const shouldRun = await GM_getValue('open-tab-for-edit', '0');
const textareaId = 'text-body';
const textarea = document.getElementById(textareaId);
if (!textarea) return;
const content = textarea.value;
const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/;
if (pgpSignatureRegex.test(content)) {
console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します');
return;
}
const httpRequest = (url, data) => {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: 'POST',
url: url,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: `value=${encodeURIComponent(data)}`,
onload: function (response) {
resolve(response.responseText);
},
onerror: function (error) {
reject(error);
}
});
});
};
// textarea の値を取得
// 1. 現在のページのURLからURLオブジェクトを作成
const currentUrl = new URL(window.location.href);
// 2. ベースとなる部分 (例: "https://anond.hatelabo.jp") を取得
const origin = currentUrl.origin;
// 3. 'id' パラメータの値 (例: "20250610184705") を取得
const idValue = currentUrl.searchParams.get('id');
// 4. ベース部分とIDを結合して、目的のURL文字列を生成
// idValueが取得できた場合のみ実行する
let newUrl = null;
if (idValue) {
newUrl = `${origin}/${idValue}`;
}
// 5. 生成されたURLを変数に代入し、コンソールに出力して確認
console.log(newUrl);
const valueToSend = newUrl;
try {
const signatureText = await httpRequest('http://localhost:12345/run-batch', valueToSend);
console.log('バッチ応答:', signatureText);
if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) {
alert('PGP署名がクリップボードに見つかりませんでした。');
return;
}
const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n';
textarea.value = newText;
console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。');
const form = document.forms.edit;
const newForm = form.cloneNode(true);
form.replaceWith(newForm);
newForm.addEventListener('submit', async (e) => {
e.preventDefault(); // HTML標準のsubmitをキャンセル
const bodyText = textarea?.value || '';
// reCAPTCHA トークンの取得
const recaptchaToken = await new Promise((resolve) => {
grecaptcha.enterprise.ready(() => {
grecaptcha.enterprise.execute('hoge', { action: 'EDIT' })
.then(resolve);
});
});
// POSTするデータの構築
const formData = new FormData(newForm);
formData.set('body', bodyText);
formData.set('recaptcha_token', recaptchaToken);
formData.set('edit', '1');
try {
const response = await fetch(newForm.action, {
method: 'POST',
body: formData,
credentials: 'same-origin'
});
if (response.ok) {
console.log('送信成功');
window.close();
} else {
console.error('送信失敗', response.status);
}
} catch (err) {
console.error('送信中にエラーが発生', err);
}
});
// プログラム的に送信トリガー
newForm.dispatchEvent(new Event('submit', { bubbles: true }));
} catch (e) {
console.error('バッチ呼び出し失敗:', e);
}
})();
const http = require('http'); const { exec } = require('child_process'); const querystring = require('querystring'); const server = http.createServer((req, res) => { if (req.method === 'GET' && req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.method === 'POST' && req.url === '/run-batch') { let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { const parsed = querystring.parse(body); const value = parsed.value || 'default'; // 値を引数としてバッチに渡す exec(`C:\\Users\\hoge\\Desktop\\makesign.bat "${value}"`, { encoding: 'utf8' }, (err, stdout, stderr) => { if (err) { res.writeHead(500); res.end('Error executing batch: ' + stderr); } else { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end(stdout.trim()); } }); }); } else { res.writeHead(404); res.end('Not found'); } }); server.listen(12345, () => { console.log('Batch server running at http://localhost:12345/'); });
@echo off setlocal enabledelayedexpansion :: 署名するファイル名 set "infile=%~1" set outfile=%TEMP%\pgp_output.asc :: 以前の出力があれば削除 if exist "%outfile%" del "%outfile%" :signloop :: AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える) start "" /b "C:\Users\hoge\Documents\AutoHotkey\autopass.ahk" :: PGPクリア署名を作成 echo %infile% | gpg --yes --clearsign --output "%outfile%" :: 署名が成功していればループを抜ける if exist "%outfile%" ( goto postprocess ) else ( timeout /t 1 > nul goto signloop ) :postprocess powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Write-Output ($header + \"`r`n\" + $body + $footer)" powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content 'signed.asc' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)" endlocal exit /b
#Persistent #SingleInstance ignore SetTitleMatchMode, 2 WinWaitActive, pinentry SendInput password Sleep 100 SendInput {Enter} ExitApp
動けばいいという考えで作っているので余分なコードも含んでいるかもしれない。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250613185036 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEv1FQAKCRBwMdsubs4+ SHHkAQDUOLgBcdji2T6MJ7h/vlMdFfGlWAzNdXijjE1gIuEPywEAiMNMZqhrMmtl c7UqRuggNJ/UTa5xTIcKp622+7jJQQg= =Lgkl -----END PGP SIGNATURE-----
ようやく(ほぼ)すべてが自動化された。
あとはローカルサーバーの起動をスタートアップに設定する(方法をAIに聞いて指示に従う)だけの消化試合。
署名時要求してくるパスワードを自動入力するahkファイルはドキュメントのAutoHotkey配下に置いた。
バッチファイル(make.sign.bat)はデスクトップに置いた。
#Persistent #SingleInstance ignore SetTitleMatchMode, 2 WinWaitActive, pinentry SendInput お前のパスワード Sleep 100 SendInput {Enter} ExitApp
// run-batch-server.js const http = require('http'); const { exec } = require('child_process'); const server = http.createServer((req, res) => { if (req.url === '/ping') { res.writeHead(200); res.end('pong'); } else if (req.url === '/run-batch') { exec('C:\\Users\\you\\Desktop\\makesign.bat', (err) => { res.writeHead(200); res.end(err ? 'Error' : 'OK'); }) ; } else { res.writeHead(404); res.end('Not found'); } }); server.listen(12345, () => { console.log('Batch server running at http://localhost:12345/'); });
@echo off setlocal enabledelayedexpansion :: ミリ秒単位のUTC時刻を取得 for /f %%a in ('powershell -nologo -command "[int64]::Parse((Get-Date).ToUniversalTime().ToString('yyyyMMddHHmmssfff'))"') do set timestamp=%%a :: 署名するファイル名 set infile=%TEMP%\pgp_input.txt set outfile=%TEMP%\pgp_output.asc :: 以前の出力があれば削除 if exist "%outfile%" del "%outfile%" :: タイムスタンプを原文として保存 echo %timestamp% > "%infile%" :signloop :: AutoHotkeyでパスフレーズ入力(gpgがパスワード要求するダイアログが出た場合に備える) start "" /b "C:\Users\infini\Documents\AutoHotkey\autopass.ahk" :: PGPクリア署名を作成 gpg --yes --clearsign --output "%outfile%" "%infile%" :: 署名が成功していればループを抜ける if exist "%outfile%" ( echo [INFO] 署名成功 goto postprocess ) else ( echo [WARN] 署名失敗、再試行します… timeout /t 1 > nul goto signloop ) :postprocess :: PowerShellで余計な改行なしに |< をつけてクリップボードにコピー powershell -nologo -command ^ "$header = '>|'; $footer = '|<'; $body = Get-Content '%outfile%' -Raw; Set-Clipboard -Value ($header + \"`r`n\" + $body + $footer)" echo Done. signed.asc created and clipboard updated (no extra blank line). endlocal exit /b
// ==UserScript== // @name PGP署名自動付加スクリプト(GM_xmlhttpRequest版) // @namespace http://tampermonkey.net/ // @version 1.0 // @description 投稿前にPGP署名を付けてから送信(fetch未使用) // @match https://anond.hatelabo.jp/dorawii_31/edit* // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @grant GM_notification // / @connect localhost // ==/UserScript== (function () { 'use strict'; const submitId = 'submit-button'; const textareaId = 'text-body'; const localServer = 'http://localhost:12345/run-batch'; const pgpSignatureRegex = /-----BEGIN PGP SIGNED MESSAGE-----[\s\S]+?-----BEGIN PGP SIGNATURE-----[\s\S]+?-----END PGP SIGNATURE-----/; const httpRequest = (url) => { return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: 'GET', url: url, onload: function (response) { resolve(response.responseText); }, onerror: function (error) { reject(error); } }); }); }; const interceptClick = () => { const btn = document.getElementById(submitId); if (!btn || btn.dataset.pgpIntercepted === 'true') return; btn.dataset.pgpIntercepted = 'true'; btn.addEventListener('click', async function (e) { const textarea = document.getElementById(textareaId); if (!textarea) return; const content = textarea.value; if (pgpSignatureRegex.test(content)) { console.log('[PGPスクリプト] 署名が検出されたためそのまま送信します'); return; } e.preventDefault(); e.stopImmediatePropagation(); console.log('[PGPスクリプト] 署名が見つからないため処理を停止し、署名を取得します'); try { await httpRequest(localServer); // バッチ実行 const signatureText = await navigator.clipboard.readText(); if (!signatureText.includes('BEGIN PGP SIGNED MESSAGE')) { alert('PGP署名がクリップボードに見つかりませんでした。'); return; } const newText = content.replace(/\s*$/, '') + '\n' + signatureText + '\n'; textarea.value = newText; console.log('[PGPスクリプト] 署名を貼り付けました。送信を再開します。'); btn.click(); // イベント再発火 } catch (err) { alert('PGP署名の取得または貼り付けに失敗しました。\n' + err); } }, true); }; window.addEventListener('load', () => { setTimeout(interceptClick, 1000); }); })();
プロミスメソッドとか全然まだ理解してなくてそのなかに関数代入したその関数にオブジェクトのプロパティにresponseを?いやまあそのあたりのコードが示すデータの流れが全然理解できないような人間でもここまでできちゃった。
AIすごいなと思うよ。そして思うのは今後重要になってくるのは文法とか自体に詳しいことじゃなくて、そのプログラムの処理内容を指示できるシステムエンジニア的な言語化能力のほうじゃないかなと思った。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 20250609111559680 -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaEbCbwAKCRBwMdsubs4+ SLueAPwOv7PBk4voAe5qlcCEvs/PJhmKc5QAb/1R43JMQFuDZgD/UTPEKsL/PhK9 jFGv2HDXK1dVjLNwvosgX9uYJh5xxwY= =qiOE -----END PGP SIGNATURE-----
https://anond.hatelabo.jp/20230611160913
のつづき
解答「ガチャをはじめ、ゲーム性に不可欠な乱数を扱うのはブロックチェーンではそもそも困難です。乱数を得るのに、乱数オラクルと呼ばれる外部サービスに依存しなければならず、しかもそれが高価だからです。ゲームのような頻繁に乱数を要するようなユースケースには耐えられません。それを嫌って、乱数オラクルを自社運用したとすれば、ソシャゲのガチャと何も変わりません。むしろ金銭的利益と直結するBCGにおいては、運営側に乱数を操作するインセンティブが生まれるので、運営の不正が蔓延するでしょう。」
※別解「ゲームロジックのようなデータ量が多くて複雑な計算は、手数料が高すぎてスマートコントラクトでは実行できません。結局、重い処理は今まで通りブロックチェーンの外で行わなければいけないので、フェアなロジック実行、チート対策などが、ブロックチェーンだからできるということにはなりません。」
解答「ゲーム内資産を金融商品化するせいで、ゲームがギャンブルになってつまらなくなるのです。GameFiは本来のゲーム性を破壊する悪の根源です。出てってください。」
解答「全く関係ありません。VR界隈から嫌われているので、はやく片思いだと気づきましょう。」
解答「全く関係ありません。AI界隈から嫌われているので、はやく片思いだと気づきましょう。」
解答「Rollupによるスケールはシステミックリスクを増大させる恐れがあり、銀の弾丸とは呼べません。複雑なインセンティブ設計で維持されている流動性ブリッジで接続し合うRollupの網の目は、マネーレゴの一部品のハッキングやラグプル、ブラックスワンイベントをきっかけに、悪影響が波及して全体として崩壊しかねません。WEBがスケールしたのは、一部の障害が全体に無影響であるからです。トークンを触媒にして密結合するRollup網は、大きくなればなるほどシステミックリスクが高まり、むしろ脆くなっていくのは想像に難くありません。」
※別解「スケールすればするほど、Time-bandits攻撃と呼ばれる攻撃のリスクが高まるでしょう。子レイヤーで発生するMEVの合計が、親レイヤーのバリデータのペナルティを差し引いても十分に余るようになれば、親レイヤーの安定したコンセンサスを守るためのインセンティブ設計が成立しなくなります。」
解答「Web3といいながら政府発行の法定通貨に依存するのですか?恥を知りましょう。それはプロダクトキラーの間違いです。Web3がこのような新しい用語を頻繁に発明するのは、矛盾を巧妙に隠蔽するためです。ステーブルコインはそれに最も成功したバズワードの一つです。」
解答「善悪を恣意的に定義し、経済的インセンティブで善に誘導するのは新しい共産主義です。」
解答「ブロックチェーンはデータの保管には向いていません。ビザンチン耐性だけなら分散DBで事足ります。もし改竄耐性が欲しいのであれば証明書チェーンのような仕組みで事足ります。すでに一部の界隈ではブロックチェーンではなく、VDR(Verifiable Data Registry)という言葉が代わりに使われるようになっています。ブロックチェーンはわざわざ使わなくて良いのです。」
解答「ブロックチェーンが必要となるのは、悪玉ピアを含む不特定多数が参加するP2Pネットワーク上で、読み書きの権限を不特定多数に開放している台帳プロトコルの状態遷移のコンセンサスを取りたい場合のみです。ビジネスにおいてここまで過酷なことを要求される場面はほとんどありません。特に不特定多数を相手にするという性質がコンプライアンス遵守と相反するのでビジネスにならないことが殆どです。数年前からWhy Blockchain?という問いに挑んできた企業の多くがブロックチェーン事業に挫折したのはここに起因します。」
解答「インターネットは通信回線やパソコンの普及などインフラやハード面が未熟だったためその真価が発揮されるまで時間がかかりました。しかしWeb3で不便とされる側面は、物理的なものではなく原理的なものに起因します。ブロックチェーンのトリレンマから言えば、分散性を諦めない限りスループットは上がりませんし、手数料も安価にはなりません。悪名高いパスフレーズはなくせません。それらは性質として受け入れないとならないのです。また、詐欺が多いという非技術的な課題は規制でしか解決できませんが、Web3業界は規制を目の敵にしています。自ら課題解決を放棄しているのです。」
※別解「インターネットをバカにしてたのは外野だけじゃん。実際に触ってた人はみんな楽しんでたよ?Web3触ってる人で楽しんでいるのは稼いでる人だけじゃん。ゼロサムゲームおつ。チュッ、ネット老人でゴ・メ・ン♫」
解答「できません」
解答「日本だけでなく世界中のWeb3ヤーがドバイに集まっています。あなた方が、ドバイに追いやられているのです。」
解答「GAFAMに負けたことを悔しがるのは大切ですが、一発逆転を狙って一過性のバズワードに躍らされるのはやめましょう。まずは、日本がGAFAMに負けたのではなく、アメリカが世界で一人勝ちしていることに着目して戦術ではなく戦略を立ててください。」
※別解1「そのまえにマイナンバーをどうにかしてください」
※別解2「まずはこの一問一答に対する反論を考えてください。」
つづき
こういう全く改行をしないパラノイア的な文章って統合失調症の兆しに見える。まぁそこまでひどくは無いだろうけど、そんな雰囲気を感じる
書いてることもちょっと独りよがりで、まぁそういう自分の日記をだらだらぶちまけるのも増田ぽいっちゃぽいんだけど
それにしても自分視点というか歪んだ世界観を見ていてそれをそのままダンプしてるだけのような文章なので
俺はAmazonに限らず多要素認証は不便だから基本的にパスワードだけにしている
いや特殊な取引とかクリティカルな部分は多要素認証使うけど、単純にログインするだけどかそういったところまで多要素認証要求されたら、速攻で切る。パスワードだけでええやろがい!
まーFirefoxのパスワードバックアップ使っているから、それが漏れたらおしまいだけど
まーそうなったら世界中が阿鼻叫喚の地獄絵図だし別にいいかなって感じ
あと、不正利用されるのクレカ情報とか購入履歴とか住所とかだしな。犯罪履歴とかそういった情報は別にばれないしいいやって感じ
セキュリティに絶対はないのでどのサービスからどれくらいの情報が漏れるのかってのを、ざっくりとわかっていればいいんじゃないのかな
そしてその情報が実際に流出してどんな被害が起こるのか。無名の一般人の情報が漏れたところで、大したダメージは無い気がする
違わない?
パスフレーズは20文字くらいあればほぼハッキング不可能な強度だからな、普通に20文字パスワードにしておけば一般人は問題ないよ
Smoozという国産ブラウザアプリがサービスを終了して、私はなんだか無性にイライラしてしまった。
WEBとセキュリティを専門としないので関連記事をざっと見た感じだと、
といった感じが主とした批判理由で、批判記事が書かれた数日後、アスツール社は利用規約を変えるでもなく、サービスの一時停止でもなく、サービスを終了させた。
Smoozを開発したアスツール社、
mala氏、
そしてお前ら
最初、あなたの記事を読んだとき、私は「こんな中華アプリみたいな情報ぶっこ抜きブラウザアプリを作るなんて、なんて腐った連中なんだ」と思いました。あなたの情報を小出しに勝負する様は見ていて気持ちよく、私が明るくないセキュリティに詳しいこともあって、あなたは正義の見方に見えたのです。
しかし、Smoozがサービスを終了させたと聞いて、私の態度は一変しました。もしアスツール社がmala氏の言うような"面の皮が厚い連中"であったなら、最初に取る一手は利用規約を変更して、なんだかんだ理由をつけてサービスを続けるだろうと思ったからです。しかしそうではなかった。
アスツール社は、アプリの使用者に「セキュリティの問題が起きたので使わないでください」というポップアップを表示する機能を実装させ、ストアから削除し、サービスを終了させました。
もしかして、邪悪な情報売買事業者は、存在しなかったのではないでしょうか?
なぜあなたはセキュリティに詳しいにもかかわらず、IPAに報告もせず(してたらごめんね)、アスツール社に報告をせず、初手でブログで開示という方法をとったのでしょう?
それはセキュリティ界隈のキャリアアップの方法が、既存のサービスの脆弱性を見つけて、それを指摘しSNSやブログでバズらせて名を上げるという戦国時代のそれだからでしょうか?(心あたり多すぎですね?)
それとも情報セキュリティマネジメント試験には、「問:脆弱性を発見した場合、これ以上被害がでないために何をすべきか」「答:SNSやブログでバズらせてサービスを停止させる」という問題が出題されているのでしょうか?
不思議なことに、私の怒りはアスツール社から一変、あなたに向けられることになりました。
私は、このmalaさんという方が「アスツール社に脆弱性報告をしている」というのを見て、正直感動しました。
なぜならセキュリティ界隈の人間は戦国時代の武将なので、脆弱性を見つけるや否や、スクショをとって「ここがまずい」「ここがやばい」とSNSに連投したり、なんの権限もないコールセンターとのやりとりをブログでバズらせる人ばかりだと思っていたからです。
しかし考えてもみれば、まじめに脆弱性報告をする人は目立たないのです。私はteraailでこまめに回答を書いている徳丸某氏の活動には目を向けないくせに、声のでかい戦国武将の活動ばかり目を向けて、セキュリティ界隈はクソだと思っていたことを恥ずかしく思いました。
しかしmalaさんの以下の文言を見て、私はそれどこらではなくなりました。
似たような要件で仕様が上がってきたら、多くの開発者が同じようなことをやるだろう。 上から目線で評論家気取りでこれは酷いなどとのたまうばかり、火事場を外から眺めて他人事で自分のことは棚に上げ、 人のふり見て我が振り直しもしない、お前もお前もお前も、漫然とインターネットをしている醜い卑しい下賤の生き物ばかり。なんとかしてくれ。
私はかつて「時間と金」を理由に、数年後に爆発する時限爆弾を見て見ぬ振りをして開発をしたことを思い出しました。そして爆発の火中に巻き込まれるのを恐れて転職しました。
そうです。私は自身の仕事ぶりには棚を上げるくせに、はてなブックマークであがってきたインシデントには人一倍敏感な棚上げクソ野郎だったのです。しかしmalaさん、毅然とインターネットをするには人生は短すぎて、人類は繁栄しすぎています。インターネットはビジネスチャンスの宝庫で、殆どの人類の関心事は他者を出し抜きそのチャンスを掴むことにあります。当然、注力すべきはビジネスロジックで、セキュリティは二の次になります。 あなたの記事をブクマして偉そうなこと書いてる技術的に聡明な人とは違って、私のような凡人は、 あなたの書かれている脆弱性の手法の意味をまったく理解できていないし、関係ない話ですが機械可読性に配慮して文章を紡ぐという必要性すらも感じていません。ただ1週間の残った2日でどう人生を輝かせるかで価値が決まる人生を歩いているのです。
あなたの文章を読んで、自分自身にも怒りが沸いてきました。真にクソなのは、棚上げ転職逃亡クソ野郎の自分自身だったからです。確かに私はインターネットも、人生も、漫然と惰性で生きている。しかしだからといって、どうすればいいのか。ビジネスの意思決定権は自分以外にあり、私にできることといったら、せいぜいが静観を決め込むぐらいだ。
残念だったのが、あなたが reliphoneに暴言を吐いたことです。セキュリティ界隈には強い言葉で反論をしずらくし周りを萎縮させる重鎮が鎮座していると思っていましたが、あなたもそれになっていることです。漫然とインターネットをしない先がそれなら、蛇の道ですね。
まず、私がアスツール社を知ったのは、はてブにSmoozの記事があがってからでした。
そこで私は「なんて非道いアプリだ。許しておけぬ」と思い、代表取締役の名前で検索し、クソ野郎の顔と名前を覚えたぞ、しししと、汚い笑みを浮かべました。
その数日後、Smoozがサービス終了したとアナウンスがあり、私は驚きました。それと同時に、貴社の情報ぶっこ抜きアプリが、果たして本当に悪意によってなされたものかと考えを改め始めました。
貴社のやりたかったことは、広告で収益をあげたかったので、そのために記事中からキーワードを引き抜いてユーザに合った広告を出したかっただけなのでしょう。すべてのユーザがハナから有料ユーザになってくれればこんなビジネスモデルにする必要はなかったのかもしれないが、そんなことは起こりうるはずもないので、無料ユーザからは本文テキストをぶっこ抜いて、DOMをいじって広告を挿入する。これはいいアイデアだと思ったのでしょう。
私も中小零細企業で働いたことのある身。凡人の自分が考えたアイデアなんて世の中にはたくさんあって、思いついたアイデアはどれもこれも上司にリジェクトされる、特許で押さえられていた、法律的にアウト寄りのグレー、なんてのはありふれた話だ。会社員歴十何年の人間が、赤字部署で一度も利益を上げたことがなく嫌気が差しついには退社し増田に入り浸る、というくらいありふれた話だ。
だから、多少の通信の秘密の暴露がなんだというのでしょう。これは開き直ったギャグでもなんでもなく、真面目にそう思います。
そうでもしないと大企業に勝てないし、潰される。あらゆることは大企業が占拠している。中小ベンチャー企業にとって、それをかいくぐったビジネスモデルは死活問題だ。たとえそれが法の穴でも……タックスヘイブンで何兆もの税金を現地に還元していない大企業の脱法行為に比べれば、可愛いものじゃないか!
私は、設立2016年、資本金1億の凡百弱小スタートアップ企業である貴社を応援したくなった。
ふてぶてしくサービスを続けてほしかった。私は クソ野郎なので、そのときはもちろん 貴社 を批判をしているだろうが、SmoozはかつてのLINEのように批判されながら成長する余地があったのではないか、という気がしました。
貴社のような弱小凡百無名スタートアップ企業がセキュリティ人材を雇うのは難しいでしょう。優秀なセキュリティ人材も、 貴社を目にも止めなかったでしょう。もしかしたら、国内ブラウザの開発という、一種のエンジニアの憧れを源泉にビジネスをスタートアップにした時点で、そのフロントエンドの複雑広大なドメイン知識をキャッチアップしきれるはずもなく、セキュリティを二の次にするスタートアップ企業である貴社は必敗が約束されていた……と考えるほど、私は人の夢を悲観的に捉えてたくないのですが、やはり生き残るには、批判を跳ね返す強靭なメンタルが必要なのでしょう。たとえ瑕疵が貴社にあったとしても。 "面の皮を厚く"せねば生き残れないなら。
それとも貴社は、本当は邪悪な情報売買事業者で、さっさとトンズラこいたのか?
「さっさとトンズラ」なんて簡単に言ってくれる。そうですよね?
どっかの誰かに「漫然とインターネットをしている」とキレられたお前らへ。
はてブに聡慧たるコメントを残している皆様におかれましては、Smoozとかいう弱小ブラウザが、他ブラウザであるSafari、Chrome、諸Microsoft製品、その他製品諸々と比較していかにevilであるかをご存知でしょう。
どんなページを見ているかがアスツール社に筒抜けであるのは嫌ですが、どんなページどころか年齢、性別、検索履歴、趣味嗜好、各サービスのアカウントとパスワードは大企業たるGAFAM様には筒抜けでも一向に構わない、という理由付けがあなたの中にあるということです。アスツール批判していてLINEやってる人はいないですよね?それとも最近のLINEはクリーンなイメージだからもう大丈夫、と自分を納得させましたか?
ところでChromeのパスワード管理機能はすごくて、どの端末で開いても、Chromeに自身のアカウントでログインすればその機能が使える。つまりパスワードはサーバで管理されているというわけです。たとえ同期パスフレーズがデフォルトで有効ではなくても、Googleはグローバルビッグカンパニーでnot evilなので、情報を売るなんてセコい商売をするわけがないとハナから信頼されているからこそ許される行為なのです。
「Googleは閲覧履歴を少しずつわからないように販売している 」という発想に私たちがならないのは、Googleはそんなことしなくても事業で成功しているからなのですが、「実はその心理的死角をついて」「裏をかいて」という発想すらもならないのは、やはり単純にGoogleがビッグすぎるからでしょう。一方、弱小貧弱キングボンビーである中小零細企業は、少しでも怪しい所があれば、単純な知識・技術不足 というよりも (弱小企業ゆえにこっちのほうがありえそうな話だとしても)、「あたりまえのように」悪意を疑われてしまいます。
結局、Googleは邪悪な情報売買事業者ではなく、アスツール社は邪悪な情報売買事業者で"ありうる"、という判断があなたの脳内で線引きされるのは、単にアスツール社が弱小凡百零細の聞いたこと無い企業であり信頼が足りない、ということ以外に理由はなく、Googleがやっている「検索履歴やキーワードから適切な広告を表示している」というのが想像以上にドラスティックで大規模にもかかわらずグローバルスタンダードになっているので、それに比較して アスツール社が「本文をぶっこぬいて送信しているから怪しい」というのは、「やり方がせこくて本流ではなく、マナーがなっていない」程度のものでしかないわけです。つまり私はマナー講師が嫌いなので、マナー講師たるお前らに腹が立っているわけです。
四者四様、いや自分を含めたら五者五様に怒りが沸いてくる。これは理不尽な、行き場のない怒りだ。大企業の不祥事は書類送検だが弱小企業の社長は懲役刑になるような理不尽さを見たときの怒り、自身の棚上げ癖と、過去の爆弾を思い出したこと、それを指摘されたように感じた羞恥に似た怒り。界隈のキャリアアップの方法が、受け入れがたいにも関わらず常識になっていることへの怒り、自己矛盾、考えがまとまらない怒り……私には世界がわからない。ビジネスに成功したためしがない。セキュリティもわからないし、なんなら上手な人間関係もわからない。アスツール社が邪悪かどうかの真実もわからない。ただ開発者の気持ちはわかる。あの頃、やばいね、ああやばいねと隣の同僚と話していた頃を思い出す。今、Smoozの開発者の席に、私がいるような気がして、それを考えると、全ての善悪を超えて、みんな許してやってくれんかね、と思うけれど、そういうわけにはいかないだろ、とイライラが一向に収まらないんだ。
{ 'transaction':[ 'key':'some_token_like_SHA-2', 'descriiption': 'bar', 'from_wallet': 1234567890, 'to_wallet': 0987654321, 'total_amount': 9999999999999, 'tax_amount': 999999999999, 'timestamp': yyyymmddhhmmss ] }
これは良い。逆に、これしか良いところはない。
必要?使うとしたら何の目的で?Surface StudioでSkypeとかするの?単なる音声認識だけならデュアルマイクにする必然性がないし、コストカットできる。
標準またはそれ以下。一般的なPCユーザーであればUSB有線かワイヤレスBluetoothのヘッドフォンを選択するはずなので、無用。
標準。Kabylake以降を待てないのは時期的に仕方がないのかも知れないが、選択としてはあまり評価できない。Surface Studio のトータルスペックを考慮すれば、第4世代を選択した方がコストカットできるので、その方が有益。
これがどうしようもないクソ。2in1であるがゆえ、でもあるが、このスペックでは「Photoshopでお絵かき」くらいが関の山。ゲーミングには使えない。
4ポートしかない。すぐ埋まる。HUB必須。スマートではない。USB 2.0x2 でも良いので、せめて6ポートに出来ないものか。
この辺が一般的なデザイナ対象のモデルであることを印象付けている。普通のPCユーザーはSDカードリーダーなんて求めていない。
標準またはそれ以下。有線LANがない、という判断もできるので色々とアレ。
標準。Bluetooth あるんだったらヘッドフォンジャック要らんだろ。
何のためにあるのか意味不明。ゲーミングPCとしては恐ろしく低スペックなのに、Xbox連動に何の意味が?
あ、やっぱりSkypeでビデオチャットさせる気なんだ。無線なのに。
Microsoftが何でこんなクソを販売しようと思ったのか意図が分からない。同スペックのディスプレイを単体で販売すればコストダウンも収益も図れそうなのに、結構馬鹿だな。
パスワード認証やめろ公開鍵認証使えって風潮あるけどさ、この時代、
公開鍵ファイル&パスフレーズ盗まれるリスクって、パスワード盗まれるリスクと大して違わなくね?
むしろ秘密鍵ファイルのみ盗まれたとときにローカルでフレーズクラックされやすいこと考えたら逆に危なくね?
もちろんパスワード認証オンにしてて、弱パスワードや使いまわしてたりするのは論外だし、
fail2banとかのリモートブルートフォースアタック避けは当然あるとしての話だけど
何が言いたいかというと、いまやsshの認証の安全性は、二段階認証>>>>公開鍵認証≒パスワード認証で、