僕も、TLS Cipherマスターになりたい!

前提知識 TLSでは、 鍵交換アルゴリズムを使って共通鍵の材料となる値を交換し、共通鍵を生成し、その鍵を用いて通信が暗号化されるわけですね。 鍵共有に使われる暗号を、公開鍵暗号と言いますね。共通鍵は、共通鍵暗号です。 公開鍵暗号 RSA DH ECDH DEH = DH ephemeral ECDHE = ECDH epemeral DHとECDHは離散対数問題を使っています g^x mod p = y で、y,p,gが与えられたとき、xが求められないってことね 共通鍵暗号 RC4 (危殆化) DES = (危殆化) 3DES きたいか ChaCha20 AES = 最も使われていて安全 RC4 = ストリーム暗号 AES = ブロック暗号 ハッシュ関数 MD5 SHA-1 SHA-2 SHA-3 TLSの暗号スイートについて はい、これすごく大事なこと言います。TLSを使って通信が暗号化されるまでの流れですね。 TLSハンドシェイク 実際にTLSの通信が始まる でですよ。TLSハンドシェイクで何を決めているか?なんですが、以下を決めているわけですね。 鍵交換アルゴリズム 署名アルゴリズム 暗号アルゴリズム 暗号利用モード ハッシュ関数 鍵交換アルゴリズムは上に書いた、RSA,ECDHE,DHEです。 署名アルゴリズムは、RSA/ECDHEを指定できますが、ここは、発行したサーバ証明書の鍵の種類に依存します。ここすごく大事。 実は、鍵交換アルゴリズムで生成されたあたいは、さらにサーバ証明書の秘密鍵で暗号化され、公開鍵で復号されるんですね。で、真正性を確かめるんですよね。 ここ、知らんかった。すごく大事。 ただ覚えておきたいのが、RSAを用いた鍵交換では、署名がなされないということ。証明書の公開鍵は、クライアントが生成したプリマスターシークレットを暗号化するために使われる。そして、秘密鍵で復号するんだよね。 ECDHEでは、毎回公開鍵が生成されるんだよね。で、その公開鍵の正当性を証明するために秘密鍵で署名し、公開鍵で検証するんだよね。 RSAを用いた鍵交換では毎回同じ公開鍵と秘密鍵のペアで通信がなされるんだよね。プリマスターシクレットも含めてね。 だから、スノーデン事件の時みたいに、暗号化されたものをずっと溜めておいて、後でどうにか秘密鍵を入手して、プリマスターシクレットを特定、 からの通信内容を特定、といったことができてしまうんだよね。これ、前方特秘性がないって言いますね。 これに対して、ECDHE、DHEは、一回一回秘密鍵と公開鍵を生成するんだよね。はいそうだね。 でも、公開鍵から秘密鍵は、頑張れば何年かかければ、推測可能だよね?だから前方特秘性は、ないと思うんだけど。 これをchatGPTに聞いてみたらこう帰ってきました。 Q. 離散対数問題は時間をかければ解読可能です。各セッションで使われる公開鍵から秘密鍵を割り出すことも、原理上は可能です。 そこで、各セッションの公開鍵と、暗号化された通信全てを保存している人がいたとしましょう。そうすると、時間さえかければ、暗号文を解読できると思うのですがいかがでしょう。 ...

October 21, 2024 · 9 min · 1889 words · Me

Mtailなどを使い、nginxを完璧に監視する

やりたいこと k8s上にechoサーバを分散させる プロキシサーバ (nginx) を立てて、そいつらに負荷分散できるようにする Mtailを使って、nginxのログを収集して、prometheus形式に変換、telegrafで取得しinflux Dbに送信 (このときにタグもつけたいかも) Cloudproberでnginxを監視したい。cloudprober -> prometheusに変換 -> telegrafで取得しinflux DBに送信(タグもつけたいかもしれない) 以上を全てansibleを使って実現したいという話だよね。厳しいかな。どうかな?? 正直k8sは必須ではない。時間がかかりそうであれば、先にgoとかで簡単なecho-serverを作って1を完了させてしまうのも全然あり。 今回の目的はあくまでnginxのモニタリングをガチガチにするってことだからね。でも、k8sの監視はちょっとしてみたいかもしれないね。 最初からprometheus形式でexportしてくれるみたいだからね。気になるところではあります。 ただ、k8sはその性質上、コンテナをデプロイするから、どこからコンテナを取ってくるかを決める必要がありますね。外部に漏らしたくない情報が入っているのであればprivateリポジトリを立てるしかない。そうでなければdocker hubでいいかな。

October 18, 2024 · 1 min · 20 words · Me

cronで定期的にmysqldumpし、定期的にバックアップサーバに送る方法(バックアップ鯖が取りに来る)

背景 Mysqlをデータベースにしてサービスを運営している。 しかし現在、Mysqlのバックアップは取っておらず、元データが消えたら全データが消える状況である。 そこで、元サーバで毎日指定された時刻にmysql_dumpをし、バックアップサーバが元サーバからデータを持ってく量なcronジョブ を作りたいと思っている。 注意点としては、本番サーバはグローバルに、バックアップ鯖はローカルネットワークにいるので、グローバルからローカルには送れないってこと。(vpnとか貼ったらいけるけどめんどい)ので、バックアップサーバもcronでscpを動かして定期的に鶏肉という感じ。 AC 毎日元サーバから吐かれたmysqldumpファイルがバックアップサーバに置かれた状態になっている 関連技術 cron 参考 設定ファイル /var/spool/cron/crontabs/<user name> が設定ファイルです。 rootユーザ用のcronを設定する方法は、 sudo vim /var/spool/cron/crontabs/root って感じで開けます。 このファイルに実行したいジョブと実行日時(実行間隔も指定可能)を指定します。 0 * * * * /home/backup.sh 五つの*が何を表すかですが、 「分 時 日 月 曜日」 結構忘れがちなのが、シェルスクリプトのパーミッションでexecuteが入ってなくてエラーになることが多いので気をつけて。(上の/home/backup.sh) ログについて(ubuntu) デフォルトではログが出力されないようになっている。 こちらを参考にログを出力するように設定を変える vi /etc/rsyslog.d/50-default.conf # コメントアウト cron.* /var/log/cron.log # リスタート service rsyslog restart mysqldump 参考文献 こちら 上のによると、特定のユーザが持っているデータベースをダンプする方法は以下のようになるかな。 mysqldump -u hoge -p -B some_database > database.sql ちなみに、パスワードの入力まで自動でやるとするとこんな感じです。 0 21 * * * mysqldump -u -hogehoge --password="hogehoge" --no-tablespaces DB_NAME > /hoge/database.sql 毎日21:01にSCPでとってくるcron jobをしくむ。さらにdbへの流し込みもやってくれると最高だよね〜。 まず、scpでpasswordを打たなくていいように鍵をリモートサーバに登録 sudo vim /etc/ssh/sshd_config # 以下をコメントアウト PubkeyAuthentication yes ssh-keygenで秘密鍵と公開鍵を生成 パスフレーズを入れないのがポイント ...

September 28, 2024 · 1 min · 176 words · Me

RSA暗号、Opensslを使ったSSl証明書の発行、san証明書の発行方法、nginxでの設定方法

この記事の流れ opensslで秘密鍵を発行してみる 秘密鍵の中身を見る RSA暗号の解説。証明。 rsa暗号でサーバ証明書を発行するまで SAN付きのサーバ証明書の作り方 lets encryptでsan付きのサーバ証明書が作れるか そもそもsslサーバ証明書とは? 「サーバー証明書」とは、「通信の暗号化」「Webサイトの運営者・運営組織の実在証明」の2つの役割をもつ電子証明書です。 です。つまり、証明書には、暗号化用の鍵+証明書が入っている、ということになる。いいですね。 秘密鍵の中身をのぞいてみる。 秘密鍵の作成 $ sudo mkdir /etc/nginx/ssl $ sudo openssl genrsa -out /etc/nginx/ssl/server.key 512 秘密鍵を作っているけど、公開鍵はどこにあるのか??というのが非常に気になります。ていうか秘密鍵が因数分解されたものなんだっけ? だからいいのか。掛け算したら一瞬でわかるって話か。おけ。ってことでさ、適当に鍵を一つ作ってみたんだよ。 ちなみに、512bitより短い鍵は作れません。これすごいよね。 -----BEGIN PRIVATE KEY----- MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA4dNuxX/SzX3wEhde FmNFXLWlNkbGq4xaU6CfKy2nI9K+SWSKueJWSjoanmEG1eb6cXozmAk4eiuKm7zv +FdQowIDAQABAkB+1CdnRoXXIT7eej8+ZZyEGARkulVD7XyhcRlTv70aMWjC29cG 1LIeSScmy5ChqoGwH9Ow/BRzZXax3yeqMQFJAiEA9m+ardfTOK/xVoSn3I5pkzoR prW2xLQi0IDsv5lEu3UCIQDqlxAo6aDT0KpBBe5HbxBgw7uf34G+m7LJs/JnoMYQ twIgALXvr0KpFEfFnWdCiKtMeKU5Oc7aWRTf6NQGWsMZZKUCIFxk6wRyH9nNEYFS qKqR3818yeUJzrwX7q7qpMqT0+65AiEAqWRxDU6t8ZjPmJd6B7w481FuwrFmF9cq mq+QXX8gjRw= -----END PRIVATE KEY----- echo "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEA4dNuxX/SzX3wEhde FmNFXLWlNkbGq4xaU6CfKy2nI9K+SWSKueJWSjoanmEG1eb6cXozmAk4eiuKm7zv +FdQowIDAQABAkB+1CdnRoXXIT7eej8+ZZyEGARkulVD7XyhcRlTv70aMWjC29cG 1LIeSScmy5ChqoGwH9Ow/BRzZXax3yeqMQFJAiEA9m+ardfTOK/xVoSn3I5pkzoR prW2xLQi0IDsv5lEu3UCIQDqlxAo6aDT0KpBBe5HbxBgw7uf34G+m7LJs/JnoMYQ twIgALXvr0KpFEfFnWdCiKtMeKU5Oc7aWRTf6NQGWsMZZKUCIFxk6wRyH9nNEYFS qKqR3818yeUJzrwX7q7qpMqT0+65AiEAqWRxDU6t8ZjPmJd6B7w481FuwrFmF9cq mq+QXX8gjRw=" | base64 --decode これでデコードしてもバイナリだからなんもわからんわ。 いかのスクリプトでデコードできるみたい。 from Crypto.PublicKey import RSA # Load the private key with open("private_key.pem", "r") as file: private_key = file.read() # Parse the private key key = RSA.import_key(private_key) # Extract the components n = key.n # Modulus e = key.e # Public exponent d = key.d # Private exponent p = key.p # Prime 1 q = key.q # Prime 2 print(f"Modulus (n): {n}") print(f"Public exponent (e): {e}") print(f"Private exponent (d): {d}") print(f"Prime 1 (p): {p}") print(f"Prime 2 (q): {q}") Modulus (n): 11827462552050103756019456673259686146276364164688350469602565108471900615793415256864500417710852720839063036792768824435280979352135219586691204539437219 Public exponent (e): 65537 Private exponent (d): 6642559381010851411383007183311248119169234719466623674178885422700539328402280041863549141435055457596044186231508711647457747564061370576607226853654857 Prime 1 (p): 111466148331411145531384799415569793304697439187343498431136600736302912289653 Prime 2 (q): 106108112006209210762976910352826494821357000184205525073929931397132009738423 ということですね。はい。 はい、でさ、RSA暗号の仕組みも今勉強してしまいましょうか。 ...

September 17, 2024 · 3 min · 619 words · Me

About_LB

LBのあれこれ 参考文献 https://qiita.com/masaozi3/items/838060d7339aef01bc2e

September 8, 2024 · 1 min · 3 words · Me

インターネットの中心

ネットワークの中心は一体どこなのか? これの答え、ついに具体的にわかったわ。 インターネットの発祥地はアメリカと言うのは有名な話だよね。 あとは、ネットワークのネットワークがインターネット、と言う話も有名な話だよね じゃあ、そのネットワークの中心はどこなのか?と言う話だが。答えは、「Tier 1 Network」に所属するISPだとおもう。詳しく述べよう。 参考文献 cloud flairのBGPの説明 Tier 1にはsoftbankも入っているのか? インターネットのすごくわかりやすい説明 昔の資料。平成15年とかなので2003年とか。まだソフバンが来る前の話 日本のISPの話 日本のISP一覧 asn/ipの取得方法 トランジットとピアリングの話 closネットワークの話もここでしています 回線事業者とISPの関係 学術ネットワークの話 Tier1 ISP はい、Tier1に所属するISPは世界で16個しかないんだよね。 こいつらは、インターネットバックボーンを形成しているISP。 で、インターネットバックボーンの役割は、海底ケーブルなどを介して、大陸間、国家間にまたがって各国の基幹ISPを相互接続して、大容量データの経路を確保することです。つまり、国家間の通信を可能にするためのケーブルを弾いてくれている。 日本の企業でTier1のISPに入っているのは、NTTとソフバンが買収したSprintっていうアメリカの会社。 で次。 日本の一次プロバイダ 宮城さんの話 janogでは、ISPの人たちがピアリングをしましょうとか、そういう交渉の場としても使われる。これはだいぶ面白いね。 また、個人がISPになることもできるって話。これは、AS番号をもらうって話になるのかな?

September 5, 2024 · 1 min · 32 words · Me

2024Sep_TODO

9/28,29でやりたいこと isuconの申し込みをやる。これは明日白木さんに確認を取って確実にやらないといけないこと。 JCで変更履歴を保持するようにしたいんだよね。これ結構データ食うと思うんだけど、実現したいです。 nginxでsanを持った証明書を登録する方法を学ぶ。これね、証明書の発行方法とssl関係を学ぶって話なんだけど、結構難しいぜこれ。 ssl入門みたいな本を読む nginxの監視を完璧にする。mtailを使ってlogも監視するし、その他業務の監視項目全部。そして、通知もやる。ちな、urlは、https://blog.ingenboy.com:8080/。仕事の監視を完全にコピーするって話だ。これできたらもうだいぶ昇給していいレベルだと思うけどね。 echoサーバを建てたいよね。まずはね。クラスタ上にね。ってことでgoで書いたエコー鯖を立てる。k8sにね。これはreal world httpを読めばいいと思うよ。vimを使ってあえてmっけ出していくのもあり。ここでは壊して学ぶk8sを読むのがいいですね。 外からvegetaで負荷をかけ続けられるようにする。 k8sも監視したい。よろピクミンだね。 gslbで二つ作った入口で振り分けられるといいよね。って感じで。 時間が余ったら宅建のお勉強もした方がいいですね。 2024/09/1時点でのタスクリスト 開発関係 会計ソフトを導入する。この辺が良さそう https://ledger-cli.org/ 自宅のK8S上にecho-serverを立てて、proxyを複数立てて、さらにvipを立てて、vegetaで負荷試験ができるようにしたい。そして、様々なメトリクスが取れるようにしたい。どうやるんだろうか。この辺は、壊して学ぶk8s的な本を買ったので、それで勉強しよう。 I and shiraki-san decided to develop GSLB using go lang. It is going to be funny Learn DNS (こっちはかなりいい感じで進んでいる。) –> Done Learn How to write packer parser using Go on TCP Layer. It is also going to be funny. 例の競馬システムを動かす時が来た。自宅のk8sで動かせるようにmanifestファイルを書いてください。よろぴくお願いしますです。 Go言語でdistributed file systemを作ってくれ!このyoutubeを見てでもいいし、goで分散システムを作ろうって入ってきたあの本でもいい。どっちでもいい。ただ、後者だとk8s上に作った分散システムを展開するので、上のやつとも親和性が高い気がしています。はい。 ISUCONの過去問を解きましょう。今年のISUCONにおそらく白木さんと出ることになります。足を引っ張りたくないので頑張ります。 ーー>isucon14の申し込みが始まったという話です。頑張りましょう。 redmineを入れてタスク管理したらおもしろう。いいかもしれない! 宅建の勉強をしよう その他 毎日筋トレしてくれ。ジムに行ってくれ。朝がいい。 毎朝早く起きてくれ。23時に寝て0630に起きる生活ができると最高だ。 早く業務委託で何かしらの案件を取ってきて売れ。 早くyoutubeチャンネル開設して、経費生活を始めてくれ! 長期目線 簿記2級とってくれ! 土地をどこに買うかかんがえてくれ!!そして貯金しろ!!マジな話、生活費8万と、共通貯金口座5万以外は全部あっちに回してくれ。 つまり、月のクレカ支払いに使えるお金は17万ということになる。保険で10マン落とされるので、残り7万か。まあそんなものやろう。

September 4, 2024 · 1 min · 74 words · Me

Booking_scheduling_system

August 27, 2024 · 0 min · 0 words · Me

Vegeta

vegeta使いになろう

August 27, 2024 · 1 min · word · Me

Shell_master

背景 インフラエンジニアは、プロセスのメモリ上で何が起こっているかは実はあまりわからないくていい。それよりも、どうやってプロセスをうまく連携させるか、そういう大局的な視点がどうしても必要になる。 結局プログラムは何かを実現するための道具でしかない。道具を作るのはいいけど、インフラエンジニア版 何がいいたいかというと、道具と道具を組み合わせて何かをするという技を学ぶためには、shellを使えるようにならないとダメだという話だ。 shell芸人になれ。 なんか、すごい人はshellでワンライナーで全部解決していく。マジですごい。 参考文献 1日1問、半年以内に習得シェルワンライナー160本ノック 問題データリポジトリ jqコマンド jqこマンdのについて だいぶ使えるのではないか? $ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' \ | jq . echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' \ | jq .items こちらの結果はこうなります。 [ { "item_id": 1, "name": "すてきな雑貨", "price": 2500 }, { "item_id": 2, "name": "格好いい置物", "price": 4500 } ] 次の例 echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' \ | jq '.items[].name' こんな感じで出力されます "すてきな雑貨" "格好いい置物" という感じで、ほうほう、jqなかなか便利ではないか??ということですね。頭に入れておきましょう。 sedコマンド selectコマンド trコマンド 文字を置換したり、削除したりできるコマンド こちらをみてみよう 使用例 echo lion | tr lion bear 結果 bear 重複しているとダメらしい、、クソか。 しかしこういう使い方はするって話だ。 hostname | tr -d "\n" date関数のすごい使い方 $ date "+%F" #年月日を出力 2022-02-28 $ date "+%T" #時分秒を出力 22:37:49 $ date '+%Y/%m/%d %H:%M:%S' #年月日と時分秒を出力 2022/02/28 22:40:13 今回はこうやって使われていた。 ...

August 22, 2024 · 1 min · 100 words · Me