این ادعا که بستهٔ VPN دقیقاً دو چک‌سام حمل می‌کند مرتب به نظر می‌رسد و به‌قدر کافی اغلب نادرست است که ارزش بازکردن داشته باشد. تعداد به این بستگی دارد که کدام نسخه‌های IP ظاهر می‌شوند، کدام پروتکل انتقال حمل می‌شود و تونل از کدام قالب حفاظت استفاده می‌کند. چک‌سام سرآیند، چک‌سام لایهٔ بالا و برچسب یکپارچگی رمزنگاری‌شده سه سازوکار با سه دامنه‌اند. شمارش آن‌ها با مشخص‌کردن اینکه هر یک چه چیزی را پوشش می‌دهد آغاز می‌شود.

بررسی کنید کدام نسخه‌های IP واقعاً روی سیم هستند

سرآیندهای IPv4 یک چک‌سام سرآیند 16 بیتی حمل می‌کنند و سرآیندهای IPv6 هیچ چیز مشابهی ندارند. همین یک واقعیت تعداد را برای هر تونل تغییر می‌دهد، زیرا پیچیدن IPv4 در IPv6 و پیچیدن IPv6 در IPv4 اسناد متفاوتی پدید می‌آورد. یک تونل می‌تواند هر دو خانواده را هم‌زمان حمل کند و در این حالت ممکن است یک جهت فیلدی داشته باشد که جهت دیگر ندارد. پیش از شمارش هر چیزی نسخه‌ها را مشخص کنید.

چیدمان را به‌صورت فهرست سرآیند بنویسید نه تصویر. هنگام خواندن یک ضبط، ترتیب اهمیت دارد و وجود یا نبود فیلد چک‌سام نخستین چیزی است که باید علامت‌گذاری شود.

outer IPv6 | ESP | inner IPv6 | UDP | application data
outer IPv4 | ESP | inner IPv4 | TCP | application data

خط اول در هیچ‌کجای سرآیندهای IP خود چک‌سام سرآیند IP ندارد، در حالی که خط دوم وقتی هر دو سرآیند IPv4 هستند دو تا دارد. همان فناوری تونل، تعدادی متفاوت، و هیچ‌یک از دو خط قالب کامل سیم نیست.

بررسی کنید هر چک‌سام چه چیزی را پوشش می‌دهد

پوشش همان بخشی است که مردم از آن می‌گذرند و همان چیزی است که شمارش را معنادار می‌کند. چک‌سام سرآیند IPv4 از سرآیند و هیچ چیز دیگری محافظت می‌کند، پس دربارهٔ بار مفید پشت آن چیزی نمی‌گوید. چک‌سام UDP روی IPv6 یک شبه‌سرآیند به‌علاوهٔ سرآیند و بار مفید UDP را پوشش می‌دهد، یعنی وقتی داده‌گرام تونل‌شده است تا درون بستهٔ حمل‌شده می‌رسد. TCP چک‌سام خودش را با وابستگی مشابه به شبه‌سرآیند دارد. این‌ها سه دامنهٔ متفاوت‌اند هرچند هر سه چک‌سام نامیده می‌شوند.

RFC 791 بررسی سرآیند IPv4 و بازمحاسبهٔ آن در هر گام را تعریف می‌کند و RFC 8200 رفتار لایهٔ بالا روی IPv6 از جمله شبه‌سرآیند را تعریف می‌کند. هیچ‌یک از این دو سند نمی‌گوید بستهٔ VPN تعداد ثابتی چک‌سام دارد، چون هیچ‌یک تونل را توصیف نمی‌کند.

tshark -r capture.pcap -Y "ip.proto == 50" -V | grep -i checksum

حفاظت یکپارچگی را جداگانه بررسی کنید

یکپارچگی ESP حفاظت رمزنگاری‌شده با پوشش خودش و نمایشی وابسته به الگوریتم است. این یک چک‌سام IP یا UDP با نام دیگر نیست و طولش با ساختار برگزیده تغییر می‌کند. یک بررسی یکپارچگی بخش مشخصی از بسته را پوشش می‌دهد که بسته به حالت می‌تواند سرآیند ESP و بخشی از بار مفید را در بر بگیرد. شمارش آن به‌عنوان فیلد چک‌سام با عرض معلوم همان جایی است که بیشتر این توضیح‌ها از هم می‌پاشد.

پیش از شمارش بایت‌ها ساختار برگزیده را بخوانید و نتیجه را حفاظت یکپارچگی توصیف کنید نه چک‌سامی با برچسب دیگر. اگر بپرسید، رمزگشا نام فیلد را به شما می‌گوید.

tshark -r capture.pcap -Y esp -V | grep -iE "integrity|icv"

پیش از شمارش، نقطهٔ مشاهده را بررسی کنید

ضبط روی واسط درونی و ضبط روی سیم می‌توانند لایه‌هایی کاملاً متفاوت نشان دهند. روی واسط درونی تونل پیش‌تر برداشته شده است، پس بستهٔ حمل‌شده را می‌بینید و هیچ‌یک از سرآیندهای بیرونی را نمی‌بینید. روی سیم سرآیندهای بیرونی و یک بار مفید رمزگذاری‌شده را می‌بینید که نمی‌توانید بخوانید. هیچ‌یک از دو دید نادرست نیست و این‌ها دیدهایی از یک شیء واحد نیستند. پیش از نقل هر تعدادی بگویید ضبط کجا گرفته شده است.

sudo tcpdump -ni eth0 -vv -c 5 esp
sudo tcpdump -ni tun0 -vv -c 5

فرمان نخست بستهٔ بیرونی را با دنبالهٔ یکپارچگی‌اش نشان می‌دهد و دومی بستهٔ حمل‌شده را با چک‌سام انتقال خودش. جمع‌کردن اعداد دو ضبط چیزی را دوبار نمی‌شمارد، اما همان بسته را دو بار توضیح می‌دهد.

تعداد را با یک ضبط واقعی بسنجید

یک بسته را کامل رمزگشایی کنید و هر فیلدی را که رمزگشا چک‌سام یا مقدار یکپارچگی می‌نامد علامت بزنید. سپس هر علامت را با چیدمانی که نوشته‌اید مقایسه کنید و هر نشانه‌ای را که به لایه‌ای تعلق دارد که واقعاً نمی‌شمارید حذف کنید. تعدادی که از این تمرین جان سالم به در ببرد قابل دفاع است و تعدادی که از حافظه نقل شود نیست.

برای جهت پاسخ تکرار کنید، زیرا تونلی که هر دو خانواده را حمل می‌کند می‌تواند به‌ازای هر جهت و هر جریان متفاوت باشد. سپس تعداد را همراه با دامنه‌اش بگویید، مثلاً سه چک‌سام برای این بستهٔ درونی در این نقطهٔ مشاهده، نه به‌عنوان ویژگی بسته‌های VPN به‌طور کلی.

tshark -r capture.pcap -T fields -e ip.checksum -e udp.checksum -e tcp.checksum

مقالات مرتبط