---
# System prepended metadata

title: BacklogのGitを支える技術

---

# BacklogのGitを支える技術

## Gitホスティングを支える~~

サービスの中核＝Go言語
HTTPのBASIC認証で認証処理を行う．
RPCを提供
- ブランチ一覧
- タグ一覧の取得
### Go言語で実装するSSHサーバ
#### SSHプロトコルの通信フローの外観
- トランスポート層プロトコル
SSHプロトコルのバージョンの交換
暗号，ホスト鍵のネゴシエーション
鍵交換
リモートホストの確認
鍵交換完了通知
サービスリクエスト
- ユーザ認証プロトコル
公開鍵認証
- コネクションプロトコル
オープンチャンネル
データ転送
クローズチャンネル

準標準パッケージx/crypto/sshを使用
サーバとしての機能は提供していない．複数のリクエストを平行にさばくデーモンプロセスとしてnet/httpを参考にSSHサーバのフレームワーム

abuseipdb.com
SYNフラッド攻撃で意図的に応答を返さず，サーバリソースを枯渇させようとしている可能性あると推測

TCP KeepAlive...TCPで接続されたホスト間で相手が生きているか定期的に確認し～～

gRPC 自動生成する強い片付けのサービス間インタフェース
デフォルトでProtocolBuffersを片付けされたIDLとしてサポート
効率的で安全なサービス間の通信が期待できる．

gRPCストリーミング
Sercer-side streaming RPC
Client-side streaming RPC

Bidirectional streaming RPC

libgit2...Gitコマンドによるオーバーヘッド．GitRPCサービスはGitリポジトリを操作するためのコアライブラリとしてC言語で開発されている．
libgit2をGo言語から実行する選択
//#include <stdio.h>
//
//
import "C"
import "unsafe"

RabbitMQ...Advanced Message Queuing Protocol(AMQO)を使用したオープンソースのメッセージ指向ミドルウェア．Erlang言語で記述されている．クラスタリングできるので拡張性と可溶性を担保しやすい．
クラウドサービスに依存しない製品を使用したい(nulab)

Goで実装さされたGitフックワーカはGoのchannel経由で受信するジョブを取得してGoルーチンで平行に処理する．
スレッドセーブ

net/http
crypto/ssh
cgo
Gitフック
三GO三GO三GO

# WebAuthnで実現するパスワードレス認証

[書籍]サイバー完全兵器
フィッシング
AOL(インターネットサービスプロバイダ)
AOLスタッフを装いパスワードを不正に
<>< フィッシング
FIDO U2F
Fast Identity Online

Universal 2nd Factor
素早いオンライン認証ユニバーサルな2要素
パスワード認証＝知識の要素
物理デバイス＝所有の要素　義務化

認証の３要素
FIPS41
Computer Security Guidelines for Implemening the Privacy Act of 1974
something the person knows;
something the person has;
something the person is.
三種の神器=has所有の要素

FIDOの基本コンセプト
公開鍵暗号を用いたチャレンジレスポンス認証
Authenticatorを用いた秘密鍵の生成と保護
originに紐づく認証情報の管理
ローカルでのユーザ認証

yubi-key


TRS-80
ゲーム機：80 space Raiders
チャレンジレスポンス

耐タンパ性
プロービング攻撃
フォールト攻撃
サイドチャネル攻撃

yubico
AppID(rpld)=origin=ドメイン名
鍵ペアの生成にドメイン名が含まれる
フィッシング耐性がある！

リモート認証
ローカル認証

Web　Authentiocation：An　API　for accessing Public Key
登録認証
navigator.credentials.create()
