GitでSSH接続を行う　キーを正しく理解できているか

# HTTPSとSSHどちらがよりセキュアか？

一般的には SSHの方がセキュリティ面では優れている と考えられます。
理由は以下の通りです。

認証情報の管理がしやすい → HTTPSのトークンは漏洩するとそのまま使われる可能性があるが、SSH鍵は秘密鍵が流出しない限り安全。
自動化やCI/CD環境での運用がしやすい → SSH鍵を専用のデプロイキーとして登録できる。
パスフレーズを設定することで安全性を高められる → SSH鍵はさらにセキュリティ強化が可能。

# 事前：設定の確認

## 現在のプロジェクトを指しているかを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/479e31ed-4dce-ce04-4cba-f7b2066b9717.png)

## 公開鍵と秘密鍵を生成
以下のコマンドで秘密鍵と公開鍵を生成することができます。

と脳死で行うよりかは他にも暗号化アルゴリズムが存在するので、その辺も理解しておきましょう。

```
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

### ssh-keygenで生成できるキー

オプションで指定できる暗号化方式は以下の4つ。

dsa
rsa
ecdsa
ed25519

dsaは脆弱性が高いため、推奨されていません。というよりもgitでは使用できないようです。
また 2025 年には OpenSSH からも削除される予定らしいです。

```
We recommend enabling RSA/SHA1 only as a stopgap measure until legacy
implementations can be upgraded or reconfigured with another key type
(such as ECDSA or Ed25519).

日本語訳
RSA/SHA1は、レガシー実装がアップグレードされるか、
別の鍵タイプ（ECDSAやEd25519など）
で再設定されるまでの暫定措置としてのみ有効にすることを推奨する。
```

そのため、上記の 
```
ssh-keygen -t rsa
````
この方法で秘密鍵を生成する場合は、以下のコマンドで、sha256に設定されているか確認しましょう。

```
ssh-keygen -l -f ~/.ssh/id_rsa.pub
```

### ed25519  について
ed25519については公式のサイトを記載します

https://ed25519.cr.yp.to/

これによると、より高速な解読にも関わらず
RSA/SHA256と同等のセキュリティをカバーすることができるそうです。

```
High security level. This system has a 2^128 security target; breaking it has similar difficulty to breaking NIST P-256, RSA with ~3000-bit keys, strong 128-bit block ciphers, etc. The best attacks known actually cost more than 2^140 bit operations on average, and degrade quadratically in success probability as the number of bit operations drops.

日本語訳

高いセキュリティ・レベル。 このシステムは2^128のセキュリティ・ターゲットを持つ。
これを破るのは、NIST P-256、〜3000ビットの鍵を持つRSA、強力な128ビット・ブロック暗号などを
破るのと同程度の難易度である。 
知られている最良の攻撃は、平均で2^140ビット以上の演算を要し、
ビット演算数が減少するにつれて成功確率は二次関数的に低下する。
```

Chat-GPT先生に聞いてみました

```
ED25519の特徴
高速な署名と検証

ED25519は楕円曲線暗号（ECC）の一種で、従来のRSAに比べて署名の作成・検証が高速です。
例えば、RSA-2048と比較すると、ED25519は数倍のスピードで動作します。
高いセキュリティ

256ビットの鍵長を持ち、十分な耐量子性を持っています（ただし、量子コンピュータに完全耐性があるわけではない）。
攻撃に対する強度は、約3000ビットのRSA鍵に相当するとされています。
短い鍵サイズと署名サイズ

秘密鍵・公開鍵ともに32バイト（256ビット）。
署名サイズは64バイト（512ビット）。
これにより、データの転送や保存が効率的になります。
簡単な鍵管理

ED25519は秘密鍵から直接公開鍵を導出できるため、鍵の管理が比較的シンプル。
これにより、誤った鍵ペアの管理が発生しにくい。
耐側信道攻撃（Side-Channel Attack）

設計時からタイミング攻撃やキャッシュ攻撃などの対策が施されており、安全性が高い。
```

# Githubで公開鍵の設定

GithubのsettingからSSH AND GPG KEYSより
NEW SSH keyで公開鍵を設定してください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/ff6fda3c-f9af-4e6d-6cca-030414a66497.png)

Titleはお好みで大丈夫です
Keyには下のcatコマンドで出力されたものを入力してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/ef40f439-bcac-af38-2db5-614b10fbc180.png)


```
最後尾のメールアドレスは抜く
マスク済み

$ cat ~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2...........d9xTHS.........RNYqJmKFiRX4qkwMY
D80YTb8Tkyi..........bsF0Saqs/WtWARE=
```

configファイルを開いて、IdentityFileが作成した秘密鍵であるかを確認する
これが前に設定したものが残っていると、正しくキーが認証されないので、確認してみましょう
```
% vi ~/.ssh/config         

Host github.com
        IdentityFile ~/.ssh/id_ed25519
        User git
```

最後に認証してみましょう
最初に認証を行う場合は、このサーバーで大丈夫か確認があるので、パスしましょう
```
ssh -T git@github.com
```

これで、ssh接続できたはずです。
セキュリティの基準は年々変わっていくので、認証方式も理解しつつ、正しい設定をしていきましょう。