はてなキーワード: 暗号化とは
解除不可能なランサムウエアを解除できたのは、鍵をだまし取ったのかもしくはいくらかの金額を積んだっていう顛末を見てある意味で納得した。
ちょっと調べた限り、暗号化って少なくとも現時点では不可能な技術(天文学的な時間がかかる)なわけでそれができるなら大混乱になるっていう理解であってるかな?
19世紀においては、海底ケーブルの主導権はイギリスにあった。イギリスはゴムのでしょうか原料産地マレーシアを植民地としており、元イギリス東インドのメンバーが1845年に設立したガタパーチャ社がケーブルの絶縁物質を独占的に販売していた。1901年の時点で海底ケーブルの63%はイギリス製であった。
この力を背景に、イギリスは他国の電報を盗聴したり、伝達を遅らせたりするなど、外交面でケーブルを利用した。たとえば、1899年のボーア戦争の時に、イギリスはフランスと南アフリカの電報をすべて検閲し、暗号化された電報は通信しないという対応をとった
開戦宣言が届かなかったKDD海底ケーブル事件がありましたっけ
ガタパーチャ社は機械調帯も輸出しており日本では代理店山崎商店が造兵廠や大手工場に販売
まぁ、下っ端プログラマには要らないだろうけど、いわゆるシステムエンジニアとかアーキテクトとか言われるレベルの仕事するには、なるべく知っとかないといけないよね。
オレの場合は、大学はかろうじて理系の一角だったけど、学問的にコンピュータサイエンスを学んだことはなくて、某IT会社でなかば業務上の必要に迫られ、なかば趣味的な興味本位もありで、ちょっとずつ勉強した。
で、もう20年くらい前だし、すでに廃止されてる(と思う)ので、守秘義務違反とかの面倒なことにならなそうだと想定してぶっちゃけると、大手携帯会社のショップで各店舗独自のプロモーション打ったりするためのWebシステムの開発に関わったことがある。
顧客の(および自分とこの)エライ人なんかに、システムの設計の根拠(この方式が最善なのか?もっと安く早くやれる方法はないのか?などなど)を常に問いかけられ、説明説得しなきゃならない。そこでコンピュータサイエンスに基づいて理路整然と話をすると、ちゃんと信頼してもらえるし、納得してカネ払ってもらえるw
そこで使ったのが、以下のような各種理論だ:
などなど... 自分史上最高に残業させられたこの仕事やってた年の年収は、900万円台おしくも1000万には届かなかったねぇw
--追記--
コンピュータサイエンスがらみの思い出でもう一個面白い(とオレが思う)ネタがあるので、ついでに書いとこうw
これは、上で書いた携帯会社のシステムよりだいぶ前のことになるが、とあるグループウェアの開発に関わってたとき、メールをFAXに向けて出力するドライバを書いたことがある。昔のことなのでオープンソースもあんまり普及してないし、タダでお手軽に使えるライブラリが見つからなかったので、「車輪の再発明」っぽいけど自分でハフマン符号化によるデータ圧縮のアルゴリズムを勉強して作ったのだ。
Win32のAPIとか呼び出して、ビットマップにテキストを描画させたとこから、ドットをちまちま数えて、白のドットがいくつ続いてたらこのコード、黒がいくつ続いてたらあのコード...って可変長のビットパターンをつなぎ合わせてファイルに書き出す...みたいな。これが理論通りにうまいこと動作して、FAXから文書が出てきた時はとっても楽しかったw
そもそもリバースエンジニアリングってハードウェア、ソフトウェアの内部動作を紐解くための解析調査であって、ネットワーク上のパケットを観察することを指すという解釈はかなり独特なものだと思う。
というのも流れるパケットを見たところでそれが何を意味するかは本質的には推測するしかなく、またパケットキャプチャ自体は経路上であれば誰でも行うことが可能で禁止する方法が無いし、自己の管理するネットワーク内でキャプチャすることを咎める法も無い。もし見られて困るものが有るのなら自衛手段として暗号化すれば良いだけの話(実際にスプラではされている)。
Wiresharkでの表示も、パケットのパターンからスプラのプロトコルであると推測・判断しているだけに過ぎないし、STUNなんてそれこそRFCになっている公知のもの。スプラではこういう動きをしているだろう、という外形的な観察だけでリバースエンジニアリングと呼ぶのは些か乱暴に思える。
なお法的には、特許法では69条「試験又は研究のためにする特許発明の実施」であれば特許権の効力は及ばない。また2019年改正著作権法では第30条の4により享受を目的としない利用に該当するとされ原則的にはリバースエンジニアリング自体は合法とされている。
IT エンジニアでセキュリティーを意識してる人は普通に使ってるよ。
テレグラムの運営会社ですら、データを覗こうとしても暗号化されて見れない仕組みになっていて、穴のある LINE とかなんかよりも安全。
ロシアとの戦時下のウクライナですらテレグラムが使われているのはそういう理由だ。
偏見で語らない方がいいぞ。
予測だけど、彼氏さんが IT に興味ある人なんじゃないかな。
IT に興味があればテレグラムをおすすめするのは変なことじゃない。
ちなみにオレも LINE は嫌いでテレグラムを使ってるぞ。セキュリティーの側面から見たら、LINE の方こそ LINE 運営会社に好き勝手されて危険だからな。
「著作権者の利益を不当に害する場合は、著作権侵害に当たる可能性がある。例えば、単に手塚治虫氏の漫画本を、誰でもそのまま読める形式でデジタルデータ化して『手塚治虫風キャラ生成用データセット』として販売する行為は、購入者がそのまま漫画本を読めるため『著作権者の利益を不当に害することとなる場合』に該当し、著作権侵害になると思われる」
引用元: https://atmarkit.itmedia.co.jp/ait/articles/1903/27/news013.html
・・・?
なんで急に文盲になったの?
誰でもそのまま読める形式でデジタルデータ化して『手塚治虫風キャラ生成用データセット』として販売する行為は、購入者がそのまま漫画本を読めるため『著作権者の利益を不当に害することとなる場合』に該当し、著作権侵害になると思われる」
平文で保存というか、平文に戻せる形で暗号化して保存しているのかもしれんね。
httpsなので経路中は盗聴できないとはいえ、適切ではない。
今はパスワードは保存せずにハッシュ化したりして元に戻せない形で保存するのが一般的なので、
というか、ここで書いちゃったのでハッカーに狙われるかもね。あーあ。ご愁傷様。
具体的なことを箇条書きにして、改行もするなと。
もう昔の話だし、増田だったら、書いても良いよね?
また、大した話じゃないし。フィクションだと思って、読んで貰えば。
誰とは言わないが、彼から聞いた話を書くわ。
ガサ入れきてもよゆーっすw
・とりあえず、令状見せてもらえます?
・ニンテイ(任意提出)は一切応じません
・事情聴取は完黙
危ない奴、↑ 印刷して部屋に貼っとけよ。
苦汁を飲んだんだよ。
奴は論破に長けているだけじゃないんだよ。
Twitter?警察が、あんなでかい企業を相手にできるわけがない。
そこそこ天下り受け入れて、投稿者の情報を開示したり、適度に有害情報をバンしてくれれば、刺さないから。
仲良くやろうや。ああいうところには、下民にはわからない会話が成り立つんだよ。
一度もTwitter Japanが警察沙汰になってないだろ?
Twitterなんか、出会い系や無修正画像サイトに成り下がってるじゃねえか。マジで見やすいしお世話になってるわ。
世の中を常に疑え。
邪魔したな。あばよ。
GoogleでもMSでもAWSでもいいんだけど、あれな動画や写真を含む2TBのHDDの中身を一時的にクラウドに退避する必要がある。
zipは4GBまでだからrarや7zにしないとダメだが、普通にアップロードしたら、GAFAMレベルに内容を検知されてしまうのでパスワードつきにする必要がある。GAFAMになら解除できそうだが、英数字記号ではなくて日本語も含めたパスワードなら量子コンピュータでもない限り、ほぼ解錠できる可能性はない。
これで用意した動画をアップロード(だが2TBあるので数日掛けるしプロバイダーに怒られる)すればまあ安心だろうか。
大事なこと忘れていた
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>
/**************************************
・NULL演算子(??)は使えない。論理積(&&)は使える。
・オブジェクトの分割代入はできない。
・importはできない。 <h3>o- *************************************/</h3>
/**************************************
関数 <h3>o- *************************************/</h3>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
if (targetAnkerNumber !== null) {
const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);
messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);
return {
...r,
updatedLoopStatuses:
_LoopStatuses.updateMinAnker(targetAnkerNumber),
};
}
}
if (SETTINGS.postSettings.noAnkerPost) {
//返信対象無し、或いは返信しない設定の場合。アンカー無し投稿文を作る。
const r = _TextCsvCursors.takeNextRowTextAsNoAnker();
messageDisplay('返信対象無し。アンカー無し投稿。');
return {
...r,
updatedLoopStatuses: _LoopStatuses,
};
}
return null;
})();
if (p) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
}
wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));
}
}
/**
* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。
* @param {string} serverName サーバー名
* @param {MyPosterName} _MyPosterName
* @param {string} postMail メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
postMail,
_MyText,
).postSubstring(retryTimes, postTo5chTread, postConfirm);
if (r) {
back();
return;
}
wait(7);
const error = createPostErrorMessage().analyze();
messageDisplay(error.message);
if (error.order === 'KILL') {
kill();
} else if (error.order === 'SKIP') {
return;
} else if (error.order === 'TRUNCATE') {
back();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
if (
SETTINGS.postSettings.noAnkerPost === false &&
SETTINGS.postSettings.replyPost === false
) {
return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&
SETTINGS.postSettings.replyPostTextCsvStartRow < 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',
);
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||
SETTINGS.postSettings.replyPostTextCsvStartRow === 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',
);
}
}
/**
* 入力フォームを表示して入力されたスレのURLを受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
const posts = window.document.getElementsByClassName('post');
return new PostList(Array.from(posts).map((e) => new Post(e)));
}
/**
* 開いてるスレのレス全て取得してPostDOMListに格納して返す。
* @returns
*/
function createPostDOMList() {
const posts = window.document.getElementsByClassName('post');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document
2022-07-23
Q.【セキュリティUSBメモリ】【情報漏洩対策USBメモリ】 「パスワードを5回間違えてロックがかかってしまいました。本製品内のデータを取り出してもらうことはできますか?」
【回答】
なりすましで依頼を受けるケースも想定されるため、お受けしておりません。
管理者用ソフトウェア対応型番であれば、管理者用ソフトウェア(有償)を使用することでデータを救出することが可能です。
(予めデータレスキュー機能を設定しておく必要があります。事後の設定はできません)
http://qa.elecom.co.jp/faq_detail.html?category=&page=1&id=4977
↑
これ読むと、例えば警察とかの政府機関からの要請があった場合はロックされたUSBからのデータ抽出依頼とかしそうな気もするんだけど、そうすると絶対安全とは思えなくて不安になる
これか
たとえば、同僚が使っているロッカー。
番号式のロックがある。
この番号を知ること、かぎつけること、暴くこと、犯罪者にとってこれ以上の美食はない。
ハイエナがうまそうに屍肉に食らいつくのと同じ。
犯罪者の人生とは、「仲間」を探し当て、世の中の治安を乱すことが最終目的だからだ。
仲間とはもちろん、「心にうしろめたいもの」を持った人間である。
「ああ、このために生まれてきたんだ」と思える。
つまり他人の秘密とは、彼らにとって最高のステーキであり、人生を満腹にするためのライフハックなのである。
「ああ、生きている!」と感じるだろう。
あれと全く同じである。