半二重プロトコル - Noise Protocol Framework (18)
アプリケーションプロトコルによっては、メッセージの送受信は必ず交互に行わなければいけない場合があります。 この場合、Noiseプロトコルは半二重モードで使うことができます。半二重モードではSymmetricState#Split()によって返される最初のCipherStateを双方向のメッセージの暗号化に使用すれば、2番目のCipherStateは使用する必要はありません。
SymmetricState#Split() は単一のCipherStateを計算するだけでよく、両方の当事者はトランスポートフェーズでは1つだけのCipherStateを保持しておくだけでよいので、これによってすこしだけ最適化が可能になります。
この機能は慎重に使用する必要があります。 特に、プロトコルが厳密に交互になっておらず、両方の当事者が同じCipherStateとnonceの値を使用して異なるメッセージを暗号化する場合、それは壊滅的なセキュリティ障害となります。