やかんです。

クリスマスということで、DALLEと色々遊んでみました。

今日やったことについて

アルゴリズムとデータ構造(授業)

  • 今日は文字列の検索。
    • ブログの検索機能とかこれなのかな。
  • 講義のスケジュール的には、次の講義で設計技法で、その次の授業時間内に試験。
  • KMPアルゴリズム、考え方自体は賢いが難しくない。実装は、検索対象となる文字列から表を生成する部分がむずそうだけどそれを越えればシンプルなはず。
  • BMアルゴリズムは、自分で改めて具体的に触れる必要があるな。インデックスの操作がよくわからん。
    • ある程度理解できた。
    • 最初はシンプルな例で考える。見つけたい文字列に重複がない例から考える。
  • KMPとBMのうちより大きくジャンプできるようを利用する、というアルゴリズムを組むのが一番速いと。
  • patternではなくtextの前計算をする場合は、インデックスを張るなど。

以下、トライ。

  • ハッシュよりも速いらしい。ハッシュ復習しよう。
  • トライは、「特定の文字列が存在するか」を判定するためのデータ構造、みたいなイメージで考えるとわかりやすいかもしれない。
    • 特定の文字列が存在する場合、その経路の終点(一番下のノード)にラベルを付与する。
    • あるいは、nullポインタを用いて、「その文字列は存在しないよ」ということを示す。
  • 26個のポインタ、というのは、「a用のポインタ、b用のポインタ、、z用のポインタ」を一つ一つのノードに用意してあげて、次の文字に存在しないポインタにnullを繋ぐ。ちょっと日本語おかしいかもしれないけど。
    • これを踏まえれば、3分探索木が理解できる。nullを繋ぐポインタが無駄だから、それはしょって、兄弟へのポインタだけを持てば十分じゃねっていう発想。

サイバーセキュリティ3(自学)

レポート提出した。

サイバーセキュリティ3(授業)(第11回)

今日はメールセキュリティについての講義のようだ。

  • 今メールというのは非常に課題が見受けられているらしい。
    • メールの専門家がいらっしゃるんだ。。
  • 「情報セキュリティ10大脅威2023」というものがあるんだ。
    • IPAが出しているらしい。
    • 10大脅威選考会というものがあるんだ。
  • メアドは一種のIDだと考えられる。
    • メアドを知っていれば、メールのプロトコル的に確実に相手にメールを送信できる。
  • しかもメールは無料だから、攻撃者にとってはノーコストで攻撃をばら撒くことができるのか。
  • cf. ドッペルゲンガードメイン
  • 暗号化したZIPファイルを送風るセキュリティ対策手法(PPAP)
    • これは意味がないよね、という話。
  • cf. セキュリティシアター
  • 能動的攻撃者、受動的攻撃者
  • メールについては、まずメールサーバー(MTA)に対してメールを送信する。で、相手のMTAに送信。で、相手はそのMTAから受信。
    • この際のプロトコルをSMTPという。
    • 相手のMTAから相手への送信はSMTPじゃないらしいが。
    • TLS上にSMTPを実現するSTARTTLS
      • MTA間の通信を暗号化できる。
    • が、攻撃者はこの暗号化を解くことが可能らしい。
    • 相手先のMTAのIPアドレスは、事前に知っておく必要がある。この時、送信先のIPアドレスを含む部分を改竄(DNSキャッシュポイズニング)。
      • 攻撃者に対してメールが送信されるように改案する。
      • 結果、攻撃者はメールを覗き見ることが可能。
  • MTA間に攻撃者が介在する場合。
    • メールが改竄される。すると、受信者はメールを開けてしまうことが多いが、結果マルウェアに感染したりする。
  • なりすましメール。
  • 受動的攻撃の場合。
    • MTA間の通信がそもそも暗号化されていないケースというものが存在する。
    • その場合は、攻撃者はダウングレード攻撃不要。で、その通信を盗聴すれば良い。
    • そもそも、自分がしようするMTAが信頼できるものなのか、という点が重要なのか。
  • 理想的なセキュリティレベルを担保したい。
    • 機密性、完全性、真正性それぞれについて別な
  • 機密性
    • DNSSEC
    • デジタル署名を用いたDNS応答検証技術:相手のIPアドレスなどを改竄することを防ぐ。リソースレコードに対して署名することで、DNSキャッシュポイズニングを防ぐことができる。
    • DNSVIZ
    • dnsviz.net
  • X.509
    • 標準規格。
    • ディジタル証明書と証明書失効リスト
    • GPTとの問答
  • DANE
    • DNS based authentication of named entities
    • DNSSECによる信頼の連鎖を元にしてディジタル証明書を運用?
    • DANEはhttps通信にも利用可能らしい。
    • _25._tcp<name of mail server domain>
  • start tls
    • smtps
    • メールの通信経路を暗号化する。
    • MTA自体が所望の送信先であることは、また別な方法によって保証する必要がある。その際に、X.509やDANEを利用可能。
  • Sender policy framework
    • 送信元のIPアドレスを利用する送信ドメイン認証技術
    • SPF
    • 送信元のIPアドレスでFW的に篩をかけるということか。
    • v=spfl ip4: 192.0.2.128/28 include: _spf.google.com -all
    • ↑これは、どういうことだ?
  • DKIM
    • domainskeys identified mail
    • メール本体を公開鍵暗号で署名。
    • メールの完全性と出所を保証する。
  • DMARC
    • domain based message authentication, reporting and comformance
    • SPF, DKIMを保証する送信ドメイン認証技術
    • dmarcが失敗した時の処理を指定できる。何もしないか、隔離するか、拒否するか。
  • SPF, DKIM, DMARCについてgoogleが声明を出しているらしい。
    • スパムメールを防ぐことができる。
  • MTA-STS
    • smtp mta strict transport security
    • ダウングレード攻撃を防ぐための要素。
    • 受信側が送信側に対して暗号化メール送信に関する方針を宣言する技術。
    • 平文でメールを送ろうとした場合、MTA-STSが働き(https上でポリシーが公開されていて、メール送信側から受信側に対してSTARTTLSされていない場合はメール送信しない、など)、機密性の侵害を防ぐことができる。

以上、要素。

  • PPAPってそもそもなんでなくならないの?
  • 社内コンプラで決められていることが多いんだ。あるいは、「PPAPしてますよ」ということで、セキュリティについてアピールできる。

以上、研究内容の共有。

メールセキュリティは向上もリテラシー向上も難しいんだなあ。。

  • ポート番号をずらすというのは、効果がないことはない。ある程度は有効なんだ。
  • クラウドの認証のためにメールアドレスを利用しているケースも多い。この場合、メールでのファイル共有とあまりセキュリティレベルは同じなのでは、という観点もある。

疑問

  • 子ドメインの鍵を親ドメインの鍵で署名するとは?
    • なるほど。
  • SPF, DKIM, DMARCは個人で設定できるの?
    • ドメイン管理者。gmailの場合はgoogle。google work spaceで独自ドメインを使用する場合は、そのドメインの管理者。
  • なんでメールは面倒なの?
    • webはエンドtoエンド。
    • メールは、MTAを経由したり、経路が複雑。
  • ユーザーとMTAサーバーの間は暗号化されます?

オペレーティングシステム(自学)

  • なんか、jupyterにアクセスすると警告でるな。
    • let’s encryptで証明書を発行しているからか?
    • まあ、気にしなくていいと思うんだけど。気になる。
  • なんかしら、理解のメルクマールが欲しいな。
  • ファイルディスクリプタってなんだっけ?
    • インターフェース。これについては、everything is fileを考えることで理解がしやすそう。
    • プロセスの外部とのやりとりは全てファイルディスクリプタを介して行われる。
    • では、具体的にファイルディスクリプタの正体はなんなのか?
  • ファイルディスクリプタはまず、整数だ。
    • 各プロセスは、ファイルディスクリプタのテーブルをもつ。
    • ファイルディスクリプタは配列として格納される。
    • 0番目(インデックス):stdin
    • 1番目:stdout
    • 2番目:stderr
    • それ以降:任意のfile description object
  • ↑これは、プロセス間でメモリが共有されないということを強く意識すれば納得がいく。で、file description objectというのは、要は「ファイルディスクリプタ、オフセット、フラグ」みたいなやつの組み合わせ。
    • file description objectには各ファイルのメタデータも含まれる。
  • となると、必然的に「じゃあファイルとは何か?メモリにおいてどういう表現のことをファイルというのか?」という点が気になるところ。
  • ファイルについて、主記憶と二次記憶の同期ってどうやって実現しているんだっけ?
    • ここにおいて、ページ置換アルゴリズムは関係してこないよな?
    • ページ置換は、物理メモリ上のページを二次記憶に退避させる(スワッピング)。
  • ディスク(二次記憶)からの読み取りはわかりやすい。キャッシュとかの効能もわかりやすいっちゃわかりやすい。
  • では、書き込み時は、メモリと二次記憶それぞれに同時に書き込んでいるのか?
    • そうではないようだ。delayed writingという戦略が取られているっぽい。
  • てかそもそも、readやwriteはメインメモリをどのように使っているんだっけ?
    • メインメモリはキャッシュに使われる、と考えて良さそう。つまり、キャッシュはメインメモリを圧迫する。
  • ということで、mmapに進む。

以下、mmap

  • This allows a programmer to manipulate files as if they were simply large arrays stored in memory, which can be very efficient.
  • ↑GPT-4による教え。なるほど。二次記憶のことを忘れてfileを操作できると。
  • mmapを使うことで、ファイルを仮想メモリ上に展開できる、的な。
    • ディスクとやりとりせずに済むから速いと。

ということで、今日の日記終了。最後までお読みいただき、ありがとうございます。