ਸ਼ੈਡੋਸਾਕਸ ਦਸਤਾਵੇਜ਼
ਨੇਵੀਗੇਸ਼ਨ
ਏ.ਈ.ਏ.ਡੀ
ਏ.ਈ.ਏ.ਡੀ ਐਸੋਸੀਏਟਿਡ ਡੇਟਾ ਦੇ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਐਨਕ੍ਰਿਪਸ਼ਨ ਲਈ ਖੜ੍ਹਾ ਹੈ। AEAD ਸਿਫਰ ਇੱਕੋ ਸਮੇਂ ਗੁਪਤਤਾ, ਅਖੰਡਤਾ ਅਤੇ ਪ੍ਰਮਾਣਿਕਤਾ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ। ਉਨ੍ਹਾਂ ਕੋਲ ਆਧੁਨਿਕ ਹਾਰਡਵੇਅਰ 'ਤੇ ਸ਼ਾਨਦਾਰ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪਾਵਰ ਕੁਸ਼ਲਤਾ ਹੈ। ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਜਦੋਂ ਵੀ ਸੰਭਵ ਹੋਵੇ AEAD ਸਿਫਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ।
ਹੇਠਾਂ ਦਿੱਤੇ AEAD ਸਿਫਰਾਂ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅਨੁਕੂਲ ਸ਼ੈਡੋਸਾਕਸ ਲਾਗੂਕਰਨਾਂ ਨੂੰ AEAD_CHACHA20_POLY1305 ਦਾ ਸਮਰਥਨ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ। ਹਾਰਡਵੇਅਰ AES ਪ੍ਰਵੇਗ ਵਾਲੀਆਂ ਡਿਵਾਈਸਾਂ ਲਈ ਲਾਗੂਕਰਨਾਂ ਨੂੰ AEAD_AES_128_GCM ਅਤੇ AEAD_AES_256_GCM ਵੀ ਲਾਗੂ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
ਨਾਮ | ਉਪ | ਕੁੰਜੀ ਦਾ ਆਕਾਰ | ਲੂਣ ਦਾ ਆਕਾਰ | ਬਿਨਾਂ ਆਕਾਰ | ਟੈਗ ਆਕਾਰ |
AEAD_CHACHA20_POLY1305 | chacha20-ietf-poly1305 | 32 | 32 | 12 | 16 |
AEAD_AES_256_GCM | aes-256-gcm | 32 | 32 | 12 | 16 |
AEAD_AES_128_GCM | aes-128-gcm | 16 | 16 | 12 | 16 |
ਕਿਰਪਾ ਕਰਕੇ ਵੇਖੋ IANA AEAD ਰਜਿਸਟਰੀ ਨਾਮਕਰਨ ਸਕੀਮ ਅਤੇ ਨਿਰਧਾਰਨ ਲਈ।
ਕੁੰਜੀ ਡੈਰੀਵੇਸ਼ਨ
ਮਾਸਟਰ ਕੁੰਜੀ ਸਿੱਧੇ ਉਪਭੋਗਤਾ ਤੋਂ ਇਨਪੁਟ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਪਾਸਵਰਡ ਤੋਂ ਤਿਆਰ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।
HKDF_SHA1 ਇੱਕ ਫੰਕਸ਼ਨ ਹੈ ਜੋ ਇੱਕ ਗੁਪਤ ਕੁੰਜੀ, ਇੱਕ ਗੈਰ-ਗੁਪਤ ਲੂਣ, ਇੱਕ ਜਾਣਕਾਰੀ ਸਤਰ ਲੈਂਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਉਪ-ਕੀ ਪੈਦਾ ਕਰਦਾ ਹੈ ਜੋ ਕ੍ਰਿਪਟੋਗ੍ਰਾਫਿਕ ਤੌਰ 'ਤੇ ਮਜ਼ਬੂਤ ਹੁੰਦਾ ਹੈ ਭਾਵੇਂ ਇਨਪੁਟ ਗੁਪਤ ਕੁੰਜੀ ਕਮਜ਼ੋਰ ਹੋਵੇ।
HKDF_SHA1(ਕੁੰਜੀ, ਨਮਕ, ਜਾਣਕਾਰੀ) => ਉਪ-ਕੁੰਜੀ
ਜਾਣਕਾਰੀ ਸਤਰ ਇੱਕ ਖਾਸ ਐਪਲੀਕੇਸ਼ਨ ਸੰਦਰਭ ਨਾਲ ਤਿਆਰ ਕੀਤੀ ਸਬ-ਕੁੰਜੀ ਨੂੰ ਜੋੜਦੀ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ, ਇਹ ਸਤਰ "ss-subkey" ਬਿਨਾਂ ਹਵਾਲੇ ਦੇ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।
ਅਸੀਂ HKDF_SHA1 ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਪੂਰਵ-ਸ਼ੇਅਰ ਕੀਤੀ ਮਾਸਟਰ ਕੁੰਜੀ ਤੋਂ ਪ੍ਰਤੀ-ਸ਼ੈਸ਼ਨ ਸਬ-ਕੀ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਾਂ। ਪੂਰਵ-ਸ਼ੇਅਰ ਕੀਤੀ ਮਾਸਟਰ ਕੁੰਜੀ ਦੇ ਪੂਰੇ ਜੀਵਨ ਦੌਰਾਨ ਲੂਣ ਵਿਲੱਖਣ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
ਪ੍ਰਮਾਣਿਤ ਐਨਕ੍ਰਿਪਸ਼ਨ/ਡਿਕ੍ਰਿਪਸ਼ਨ
AE_encrypt ਇੱਕ ਫੰਕਸ਼ਨ ਹੈ ਜੋ ਇੱਕ ਗੁਪਤ ਕੁੰਜੀ, ਇੱਕ ਗੈਰ-ਗੁਪਤ ਨੋਟਸ, ਇੱਕ ਸੁਨੇਹਾ ਲੈਂਦਾ ਹੈ, ਅਤੇ ਸਾਈਫਰਟੈਕਸਟ ਅਤੇ ਇੱਕ ਪ੍ਰਮਾਣੀਕਰਨ ਟੈਗ ਬਣਾਉਂਦਾ ਹੈ। ਹਰੇਕ ਸੱਦਾ ਵਿੱਚ ਦਿੱਤੀ ਕੁੰਜੀ ਲਈ Nonce ਵਿਲੱਖਣ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
AE_encrypt(ਕੁੰਜੀ, nonce, ਸੁਨੇਹਾ) => (ਸਿਫਰਟੈਕਸਟ, ਟੈਗ)
AE_decrypt ਇੱਕ ਫੰਕਸ਼ਨ ਹੈ ਜੋ ਇੱਕ ਗੁਪਤ ਕੁੰਜੀ, ਗੈਰ-ਗੁਪਤ ਨੋਨਸ, ਸਿਫਰਟੈਕਸਟ, ਇੱਕ ਪ੍ਰਮਾਣਿਕਤਾ ਟੈਗ ਲੈਂਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਅਸਲੀ ਸੁਨੇਹਾ ਬਣਾਉਂਦਾ ਹੈ। ਜੇਕਰ ਕਿਸੇ ਵੀ ਇਨਪੁਟ ਨਾਲ ਛੇੜਛਾੜ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਡੀਕ੍ਰਿਪਸ਼ਨ ਅਸਫਲ ਹੋ ਜਾਵੇਗੀ।
AE_decrypt(key, nonce, ciphertext, tag) => ਸੁਨੇਹਾ
TCP
ਇੱਕ AEAD ਇਨਕ੍ਰਿਪਟਡ TCP ਸਟ੍ਰੀਮ ਪ੍ਰਤੀ-ਸੈਸ਼ਨ ਸਬ-ਕੁੰਜੀ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਇੱਕ ਬੇਤਰਤੀਬੇ ਤੌਰ 'ਤੇ ਤਿਆਰ ਕੀਤੇ ਨਮਕ ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ, ਇਸਦੇ ਬਾਅਦ ਐਨਕ੍ਰਿਪਟ ਕੀਤੇ ਭਾਗਾਂ ਦੀ ਗਿਣਤੀ ਹੁੰਦੀ ਹੈ। ਹਰੇਕ ਟੁਕੜੇ ਦੀ ਹੇਠ ਲਿਖੀ ਬਣਤਰ ਹੁੰਦੀ ਹੈ:
[ਇਨਕ੍ਰਿਪਟਡ ਪੇਲੋਡ ਲੰਬਾਈ][ਲੰਬਾਈ ਟੈਗ][ਇਨਕ੍ਰਿਪਟਡ ਪੇਲੋਡ][ਪੇਲੋਡ ਟੈਗ]
ਪੇਲੋਡ ਲੰਬਾਈ 2x0FFF 'ਤੇ ਕੈਪਡ ਇੱਕ 3-ਬਾਈਟ ਵੱਡਾ-ਐਂਡੀਅਨ ਅਣ-ਹਸਤਾਖਰਿਤ ਪੂਰਨ ਅੰਕ ਹੈ। ਉੱਚੇ ਦੋ ਬਿੱਟ ਰਾਖਵੇਂ ਹਨ ਅਤੇ ਜ਼ੀਰੋ 'ਤੇ ਸੈੱਟ ਕੀਤੇ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ। ਪੇਲੋਡ ਇਸ ਲਈ 16*1024 - 1 ਬਾਈਟਸ ਤੱਕ ਸੀਮਿਤ ਹੈ।
ਪਹਿਲਾ AEAD ਇਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ 0 ਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੀ ਇੱਕ ਕਾਉਂਟਿੰਗ ਨੋਨਸ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਹਰੇਕ ਇਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ ਤੋਂ ਬਾਅਦ, ਨੋਨਸ ਨੂੰ ਇੱਕ ਦੁਆਰਾ ਵਧਾਇਆ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਇਹ ਇੱਕ ਅਣ-ਹਸਤਾਖਰਿਤ ਲਿਟਲ-ਐਂਡੀਅਨ ਪੂਰਨ ਅੰਕ ਸੀ। ਨੋਟ ਕਰੋ ਕਿ ਹਰੇਕ TCP ਹਿੱਸੇ ਵਿੱਚ ਦੋ AEAD ਐਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ: ਇੱਕ ਪੇਲੋਡ ਲੰਬਾਈ ਲਈ, ਅਤੇ ਇੱਕ ਪੇਲੋਡ ਲਈ। ਇਸਲਈ ਹਰ ਇੱਕ ਟੁਕੜਾ ਨਾਨਸ ਨੂੰ ਦੋ ਵਾਰ ਵਧਾਉਂਦਾ ਹੈ।
TCP
ਇੱਕ AEAD ਇਨਕ੍ਰਿਪਟਡ TCP ਸਟ੍ਰੀਮ ਪ੍ਰਤੀ-ਸੈਸ਼ਨ ਸਬ-ਕੁੰਜੀ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਇੱਕ ਬੇਤਰਤੀਬੇ ਤੌਰ 'ਤੇ ਤਿਆਰ ਕੀਤੇ ਨਮਕ ਨਾਲ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ, ਇਸਦੇ ਬਾਅਦ ਐਨਕ੍ਰਿਪਟ ਕੀਤੇ ਭਾਗਾਂ ਦੀ ਗਿਣਤੀ ਹੁੰਦੀ ਹੈ। ਹਰੇਕ ਟੁਕੜੇ ਦੀ ਹੇਠ ਲਿਖੀ ਬਣਤਰ ਹੁੰਦੀ ਹੈ:
[ਇਨਕ੍ਰਿਪਟਡ ਪੇਲੋਡ ਲੰਬਾਈ][ਲੰਬਾਈ ਟੈਗ][ਇਨਕ੍ਰਿਪਟਡ ਪੇਲੋਡ][ਪੇਲੋਡ ਟੈਗ]
ਪੇਲੋਡ ਲੰਬਾਈ 2x0FFF 'ਤੇ ਕੈਪਡ ਇੱਕ 3-ਬਾਈਟ ਵੱਡਾ-ਐਂਡੀਅਨ ਅਣ-ਹਸਤਾਖਰਿਤ ਪੂਰਨ ਅੰਕ ਹੈ। ਉੱਚੇ ਦੋ ਬਿੱਟ ਰਾਖਵੇਂ ਹਨ ਅਤੇ ਜ਼ੀਰੋ 'ਤੇ ਸੈੱਟ ਕੀਤੇ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ। ਪੇਲੋਡ ਇਸ ਲਈ 16*1024 - 1 ਬਾਈਟਸ ਤੱਕ ਸੀਮਿਤ ਹੈ।
ਪਹਿਲਾ AEAD ਇਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ 0 ਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੀ ਇੱਕ ਕਾਉਂਟਿੰਗ ਨੋਨਸ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਹਰੇਕ ਇਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ ਤੋਂ ਬਾਅਦ, ਨੋਨਸ ਨੂੰ ਇੱਕ ਦੁਆਰਾ ਵਧਾਇਆ ਜਾਂਦਾ ਹੈ ਜਿਵੇਂ ਕਿ ਇਹ ਇੱਕ ਅਣ-ਹਸਤਾਖਰਿਤ ਲਿਟਲ-ਐਂਡੀਅਨ ਪੂਰਨ ਅੰਕ ਸੀ। ਨੋਟ ਕਰੋ ਕਿ ਹਰੇਕ TCP ਹਿੱਸੇ ਵਿੱਚ ਦੋ AEAD ਐਨਕ੍ਰਿਪਟ/ਡਿਕ੍ਰਿਪਟ ਓਪਰੇਸ਼ਨ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ: ਇੱਕ ਪੇਲੋਡ ਲੰਬਾਈ ਲਈ, ਅਤੇ ਇੱਕ ਪੇਲੋਡ ਲਈ। ਇਸਲਈ ਹਰ ਇੱਕ ਟੁਕੜਾ ਨਾਨਸ ਨੂੰ ਦੋ ਵਾਰ ਵਧਾਉਂਦਾ ਹੈ।