java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar
⇔
StreamRelay.bat
StreamRelay.jar にはストリームに暗号処理を被せる事ができるため、VPN(Zebedee)の代替のようなことを行わせることもできる。
諸注意
zebedee プロトコル互換ではないし、zebedee のようなマルチプロトコルを含有できるようなものでもなく、あくまで通信を暗号化する、そして、鍵交換を安全に行う、という内容です
クライアント側(タイプ1)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 90 -RemoteHost 192.0.2.1 -RemotePort 10990 -RemoteCipherAlgorithm RC4 -RemoteCipherDH
「remote」と呼称される側のストリーム側に
- 暗号アルゴリズムは RC4
- 鍵交換に DH
サーバ側(タイプ1)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 10990 -RemoteHost 192.0.2.2 -RemotePort 80 -LocalCipherAlgorithm RC4 -LocalCipherDH
「local」と呼称される側のストリーム側も
- 暗号アルゴリズムは RC4
- 鍵交換に DH
クライアント側(タイプ2)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 90 -RemotePort 10990 -RemoteHost 192.0.2.1 -RemoteCipherAlgorithm AES/OFB8/NoPadding -RemoteCipherPassword abcdefgh -RemoteAlgorithmParameters [サーバ側で出力されたAlgorithmParameterを指定する]
「remote」と呼称される側のストリーム側に
- 暗号アルゴリズムは AES
- 鍵交換は使わずに事前共有鍵をセットしている
- サーバ側で出力される「AlgorithmParameter」も事前共有しておく必要がある
サーバ側(タイプ2)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 10990 -RemotePort 80 -RemoteHost 192.0.2.2 -LocalCipherAlgorithm AES/OFB8/NoPadding -LocalCipherPassword abcdefgh -CalculateAlgorithmParameters
「local」と呼称される側のストリーム側も
- 暗号アルゴリズムは AES
- 鍵交換は使わずに事前共有鍵をセットしている
クライアント側(タイプ3)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 90 -RemotePort 10990 -RemoteHost 192.0.2.1 -RemoteCipherAlgorithm AES/CTR/NoPadding -RemoteCipherPassword abcdefgh -RemoteAlgorithmParameters [サーバ側で出力されたAlgorithmParameterを指定する]
「remote」と呼称される側のストリーム側に
- 暗号アルゴリズムは AES
- モードを CTR にする事でブロック暗号がストリーム暗号のように1バイト毎に出力される
- 鍵交換は使わずに事前共有鍵をセットしている
- サーバ側で出力される「AlgorithmParameter」も事前共有しておく必要がある
サーバ側(タイプ3)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 10990 -RemotePort 80 -RemoteHost 192.0.2.2 -LocalCipherAlgorithm AES/CTR/NoPadding -LocalCipherPassword abcdefgh -CalculateAlgorithmParameters
「local」と呼称される側のストリーム側も
- 暗号アルゴリズムは AES
- モードを CTR にする事でブロック暗号がストリーム暗号のように1バイト毎に出力される
- 鍵交換は使わずに事前共有鍵をセットしている
- サーバ側で出力される「AlgorithmParameter」も事前共有しておく必要がある
クライアント側(タイプ4)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 90 -RemotePort 10990 -RemoteHost 192.0.2.1 -RemoteZLIBCommpress -RemoteCipherAlgorithm AES/CTR/NoPadding -RemoteCipherPassword abcdefgh -RemoteAlgorithmParameters [サーバ側で出力されたAlgorithmParameterを指定する]
「remote」と呼称される側のストリーム側に
- 暗号アルゴリズムは AES
- モードを CTR にする事でブロック暗号がストリーム暗号のように1バイト毎に出力される
- 鍵交換は使わずに事前共有鍵をセットしている
- サーバ側で出力される「AlgorithmParameter」も事前共有しておく必要がある
- バッファリングょしない zlib 圧縮を指定
サーバ側(タイプ4)
java.exe -Djava.security.policy=StreamRelay.policy -jar StreamRelay.jar -LocalPort 10990 -RemotePort 80 -RemoteHost 192.0.2.2 -LocalZLIBCommpress -LocalCipherAlgorithm AES/CTR/NoPadding -LocalCipherPassword abcdefgh -CalculateAlgorithmParameters
「local」と呼称される側のストリーム側も
- 暗号アルゴリズムは AES
- モードを CTR にする事でブロック暗号がストリーム暗号のように1バイト毎に出力される
- 鍵交換は使わずに事前共有鍵をセットしている
- サーバ側で出力される「AlgorithmParameter」も事前共有しておく必要がある
- バッファリングょしない zlib 圧縮を指定
鍵交換アルゴリズム
Java には DH 法と ECDH 法が標準されていた。
当然、事前共有鍵をセットして、それを使う、という事も可能ですよ
圧縮
-(Local|remote)ZLIB(DeCommpress/Commpress) を指定する事でバッファリングしない zlib圧縮が可能だ
暗号一般
ファイル暗号化コマンドとしての StreamRelay.jar
ブロックサイズ
暗号アルゴリズムとか、暗号モードによっては、ストリーム暗号のように1Byte単位にする事もできる