Shadowsocks ದಸ್ತಾವೇಜನ್ನು
ಸಂಚರಣೆ
AEAD
AEAD ಅಸೋಸಿಯೇಟೆಡ್ ಡೇಟಾದೊಂದಿಗೆ ದೃಢೀಕೃತ ಎನ್ಕ್ರಿಪ್ಶನ್ ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ. AEAD ಸೈಫರ್ಗಳು ಏಕಕಾಲದಲ್ಲಿ ಗೌಪ್ಯತೆ, ಸಮಗ್ರತೆ ಮತ್ತು ದೃಢೀಕರಣವನ್ನು ಒದಗಿಸುತ್ತವೆ. ಅವರು ಆಧುನಿಕ ಯಂತ್ರಾಂಶದಲ್ಲಿ ಅತ್ಯುತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ವಿದ್ಯುತ್ ದಕ್ಷತೆಯನ್ನು ಹೊಂದಿದ್ದಾರೆ. ಬಳಕೆದಾರರು ಸಾಧ್ಯವಾದಾಗಲೆಲ್ಲಾ AEAD ಸೈಫರ್ಗಳನ್ನು ಬಳಸಬೇಕು.
ಕೆಳಗಿನ AEAD ಸೈಫರ್ಗಳನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ. ಕಂಪ್ಲೈಂಟ್ Shadowsocks ಅಳವಡಿಕೆಗಳು 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 ಒಂದು ಕಾರ್ಯವಾಗಿದ್ದು ಅದು ರಹಸ್ಯ ಕೀ, ರಹಸ್ಯವಲ್ಲದ ನಾನ್ಸ್, ಸಂದೇಶವನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಸೈಫರ್ಟೆಕ್ಸ್ಟ್ ಮತ್ತು ದೃಢೀಕರಣ ಟ್ಯಾಗ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಪ್ರತಿ ಆಹ್ವಾನದಲ್ಲಿ ನೀಡಲಾದ ಕೀಗೆ ನಾನ್ಸ್ ಅನನ್ಯವಾಗಿರಬೇಕು.
AE_encrypt(ಕೀಲಿ, ನಾನ್ಸ್, ಸಂದೇಶ) => (ಸೈಫರ್ಟೆಕ್ಸ್ಟ್, ಟ್ಯಾಗ್)
AE_decrypt ಒಂದು ಕಾರ್ಯವಾಗಿದ್ದು ಅದು ರಹಸ್ಯ ಕೀ, ರಹಸ್ಯವಲ್ಲದ ನಾನ್ಸ್, ಸೈಫರ್ಟೆಕ್ಸ್ಟ್, ದೃಢೀಕರಣ ಟ್ಯಾಗ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಮೂಲ ಸಂದೇಶವನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ಇನ್ಪುಟ್ನಲ್ಲಿ ಯಾವುದಾದರೂ ಟ್ಯಾಂಪರ್ ಆಗಿದ್ದರೆ, ಡೀಕ್ರಿಪ್ಶನ್ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ.
AE_decrypt(ಕೀ, ನಾನ್ಸ್, ಸೈಫರ್ಟೆಕ್ಸ್ಟ್, ಟ್ಯಾಗ್) => ಸಂದೇಶ
TCP
AEAD ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ TCP ಸ್ಟ್ರೀಮ್ ಪ್ರತಿ ಸೆಷನ್ ಸಬ್ಕೀಯನ್ನು ಪಡೆಯಲು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಉತ್ಪತ್ತಿಯಾಗುವ ಉಪ್ಪಿನೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ, ನಂತರ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಭಾಗಗಳು. ಪ್ರತಿಯೊಂದು ಭಾಗವು ಈ ಕೆಳಗಿನ ರಚನೆಯನ್ನು ಹೊಂದಿದೆ:
[ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಪೇಲೋಡ್ ಉದ್ದ][ಉದ್ದ ಟ್ಯಾಗ್][ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಪೇಲೋಡ್][ಪೇಲೋಡ್ ಟ್ಯಾಗ್]
ಪೇಲೋಡ್ ಉದ್ದವು 2-ಬೈಟ್ ದೊಡ್ಡ-ಎಂಡಿಯನ್ ಸಹಿ ಮಾಡದ ಪೂರ್ಣಾಂಕವಾಗಿದ್ದು 0x3FFF ನಲ್ಲಿ ಮುಚ್ಚಲಾಗಿದೆ. ಹೆಚ್ಚಿನ ಎರಡು ಬಿಟ್ಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ ಮತ್ತು ಸೊನ್ನೆಗೆ ಹೊಂದಿಸಬೇಕು. ಆದ್ದರಿಂದ ಪೇಲೋಡ್ ಅನ್ನು 16*1024 - 1 ಬೈಟ್ಗಳಿಗೆ ಸೀಮಿತಗೊಳಿಸಲಾಗಿದೆ.
ಮೊದಲ AEAD ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಯು 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಎಣಿಕೆಯ ನಾನ್ಸ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಪ್ರತಿ ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಯ ನಂತರ, ನಾನ್ಸ್ ಅನ್ನು ಸಹಿ ಮಾಡದ ಲಿಟಲ್-ಎಂಡಿಯನ್ ಪೂರ್ಣಾಂಕದಂತೆ ಒಂದರಿಂದ ಹೆಚ್ಚಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ TCP ಭಾಗವು ಎರಡು AEAD ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ: ಒಂದು ಪೇಲೋಡ್ ಉದ್ದಕ್ಕೆ ಮತ್ತು ಇನ್ನೊಂದು ಪೇಲೋಡ್ಗೆ. ಆದ್ದರಿಂದ ಪ್ರತಿ ಭಾಗವು ಒಮ್ಮೆಗೆ ಎರಡು ಬಾರಿ ಹೆಚ್ಚಾಗುತ್ತದೆ.
TCP
AEAD ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ TCP ಸ್ಟ್ರೀಮ್ ಪ್ರತಿ ಸೆಷನ್ ಸಬ್ಕೀಯನ್ನು ಪಡೆಯಲು ಯಾದೃಚ್ಛಿಕವಾಗಿ ಉತ್ಪತ್ತಿಯಾಗುವ ಉಪ್ಪಿನೊಂದಿಗೆ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ, ನಂತರ ಯಾವುದೇ ಸಂಖ್ಯೆಯ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಭಾಗಗಳು. ಪ್ರತಿಯೊಂದು ಭಾಗವು ಈ ಕೆಳಗಿನ ರಚನೆಯನ್ನು ಹೊಂದಿದೆ:
[ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಪೇಲೋಡ್ ಉದ್ದ][ಉದ್ದ ಟ್ಯಾಗ್][ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಪೇಲೋಡ್][ಪೇಲೋಡ್ ಟ್ಯಾಗ್]
ಪೇಲೋಡ್ ಉದ್ದವು 2-ಬೈಟ್ ದೊಡ್ಡ-ಎಂಡಿಯನ್ ಸಹಿ ಮಾಡದ ಪೂರ್ಣಾಂಕವಾಗಿದ್ದು 0x3FFF ನಲ್ಲಿ ಮುಚ್ಚಲಾಗಿದೆ. ಹೆಚ್ಚಿನ ಎರಡು ಬಿಟ್ಗಳನ್ನು ಕಾಯ್ದಿರಿಸಲಾಗಿದೆ ಮತ್ತು ಸೊನ್ನೆಗೆ ಹೊಂದಿಸಬೇಕು. ಆದ್ದರಿಂದ ಪೇಲೋಡ್ ಅನ್ನು 16*1024 - 1 ಬೈಟ್ಗಳಿಗೆ ಸೀಮಿತಗೊಳಿಸಲಾಗಿದೆ.
ಮೊದಲ AEAD ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಯು 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಎಣಿಕೆಯ ನಾನ್ಸ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಪ್ರತಿ ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಯ ನಂತರ, ನಾನ್ಸ್ ಅನ್ನು ಸಹಿ ಮಾಡದ ಲಿಟಲ್-ಎಂಡಿಯನ್ ಪೂರ್ಣಾಂಕದಂತೆ ಒಂದರಿಂದ ಹೆಚ್ಚಿಸಲಾಗುತ್ತದೆ. ಪ್ರತಿ TCP ಭಾಗವು ಎರಡು AEAD ಎನ್ಕ್ರಿಪ್ಟ್/ಡೀಕ್ರಿಪ್ಟ್ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ ಎಂಬುದನ್ನು ಗಮನಿಸಿ: ಒಂದು ಪೇಲೋಡ್ ಉದ್ದಕ್ಕೆ ಮತ್ತು ಇನ್ನೊಂದು ಪೇಲೋಡ್ಗೆ. ಆದ್ದರಿಂದ ಪ್ರತಿ ಭಾಗವು ಒಮ್ಮೆಗೆ ಎರಡು ಬಾರಿ ಹೆಚ್ಚಾಗುತ್ತದೆ.