# E2EE 機能

> **警告**
>
> E2EE 機能は実験的機能のため、正式版では仕様が変更される可能性があります

## 概要

E2EE とは End-to-End Encryption の略で、音声や映像を、
WebRTC SFU が保持しない暗号鍵を利用して暗号化した状態で WebRTC SFU に送る仕組みです。

そのため WebRTC SFU 側では音声や映像を解析することが不可能になります。

## 既知の問題

**この問題は次の Sora E2EE ライブラリのリリースで解決予定です**

- 同一ページで同一チャネルに複数接続できない
- 同一ページで複数チャネルに接続できない

## SDK 対応状況

現時点では Sora JavaScript SDK が E2EE に対応しています。

iOS / Android / Unity SDK は非対応です。

## 対応済みブラウザ

- Chrome 89 以降
- Edge 89 以降

## Sora E2EE の詳細

別途ドキュメントにまとめています。

[Sora E2EE ドキュメント](https://sora-e2ee.shiguredo.jp/)

## E2EE を有効にする

### e2ee 設定の有効化

**E2EE 機能はデフォルトで無効です**

sora.conf にて `e2ee = true` を設定してください。

```ini
e2ee = true
```

有効にすることで Sora が E2EE メッセージルーティングを行うようになります。

この設定が `false` の状態でクライアントが E2EE 接続を行っても、メッセージのルーティングを行わず切断されます。

### signaling_notify の有効化

**シグナリング通知機能はデフォルトで有効です**

E2EE 機能はシグナリング通知機能を利用します。

```ini
signaling_notify = true
```

### signaling_notify_connection_id の有効化

**シグナリング通知コネクション ID 機能はデフォルトで有効です**

E2EE 機能はシグナリング通知機能のコネクション ID を利用します。

```ini
signaling_notify_connection_id = true
```

### signaling_notify_metadata の有効化

**シグナリング通知メタデータ機能はデフォルトで有効です**

E2EE 機能はシグナリング通知機能のメタデータを利用します。

```ini
signaling_notify_metadata = true
```

## E2EE を利用する

### wasm ファイルの用意

ブラウザで Sora の E2EE を利用するには wasm ファイルが必要です。
wasm ファイルは自前でビルドすることをおすすめします。ビルドをご確認下さい。



### ビルド済み WebAssembly バイナリ

弊社では、開発ツールでの利用のため、ビルド済み WebAssembly バイナリを CDN で提供しています。

- - 2020.2 バージョン

> **重要**
>
> 本番環境では、これらの URL は利用しないでください。
> 代わりに、自前でビルドしたバイナリを配置してご利用下さい。

### Sora JavaScript SDK の用意

Sora JS SDK の最新版を利用してください。

```javascript
// E2EE 用 Wasm 読み込み
// Sora.initE2EE("wasm.wasm"); でも良い
Sora.initE2EE("https://example.com/wasm.wasm");

let sora = Sora.connection('wss://example.com/signaling');
let channelId = 'sora-e2ee';
let sendrecv = sora.sendrecv(channelId, undefined, {e2ee: true});

navigator.mediaDevices.getUserMedia({audio: true, video: true})
  .then(mediaStream => {
    // connect
    sendrecv.connect(mediaStream)
      .then(stream => {
        // stream を video.src に追加する等の処理
      });
  })
  .catch(e => {
    console.error(e);
  });

// disconnect
sendrecv.disconnect()
  .then(() => {
    // video を止める等の処理
  });

// event
sendrecv.on('disconnect', function(e) {
  console.error(e);
});
```

## サポート

E2EE ではクライアントを含めたサポートが必要になる場合がありますが、
ご質問などがあればまずサポートまでお問い合わせください。

## E2EE が有効かどうか

E2EE の状態で録画を行うと、生成されるファイルが全て暗号化された状態になり、
一切見られなくなりますので **E2EE の動作確認** として利用してみて下さい。

## Discord



Discord にてコミュニティを運営しています。
なにか質問したい場合は Discord サーバーへ参加してください。
