در پاییز 1995، در سال دوم تحصیلم بعنوان یک دانشجو در دانشگاه Simon Fraser، یک دورهء درسی بنام Math 242 داشتم که عنوانش «آشنایی با تحلیل» بود. این یک دورهء اجباری برای دانشجویان ریاضی بود (و هنوز هست)، و به دلایل خیلی خوبی اغلب بعنوان «دوره ای که مشخص میکند آیا شما مدرک ریاضی را خواهید گرفت» توصیف میشود، و نخستین دوره ای است که دقت و سختگیری ریاضی را جدی میگیرد. آیا درس حسابان سال اول را که مباحث دنباله ها، سری ها، همگرایی، پیوستگی توابع، حد را در خود داشت بیاد دارید؟ این دوره ای است که شما یاد میگیرید هرچیزی را که فکر میکنید از پیش میدانید اثبات کنید.
در نیمسالی که من این دوره را گرفتم، رتبهء میانگین در امتحان میان ترم 29 درصد بود. سه نفر از دانشجویان (شامل خودم)، از یک کلاس حدودا 40 نفره، رتبهء بالاتر از 50 درصد گرفتند. من نمره های دقیق نیم سال های دیگر را نمیدانم، اما فکر میکنم آن توزیع رتبه چیز غیرعادی ای نبود.
چرا میانگین آنقدر پایین بود؟ چون تمام امتحان میان ترم از نوشتن اثبات ها تشکیل شده بود؛ و یک اثبات درست نیست تا وقتی که تمام حالتهای ممکن را شامل شود. آیا فراموش کردید قبل از اینکه حساب کنید مقدار یک حد چقدر است ثابت کنید آن حد وجود دارد؟ پس اثبات شما غلط است! فرض کردید تابع پیوستهء شما بصورت یکنواخت پیوسته است؟ اثبات شما غلط است. آیا از اثبات اینکه یک تابع پیوسته است به اینکه آن مشتق پذیر است جهش کردید؟ اثبات شما غلط است. با حتی کوچکترین فرض تضمین نشده، حتی اگر چیزی که شما فکر میکنید اثبات کرده اید واقعا درست باشد، اثبات شما غلط است!
این چیزی است که Bruce Schneier «ذهنیت امنیتی» مینامد -- و همهء ریاضیدان ها آن را دارند. در نخستین فصل تز دکترای من، یک صفحه را به اثبات قضیه ای درمورد توزیع اعداد اول اختصاص دادم (این قضیه که بین x و x * (1 + 2 / log(x)) حداقل x / log(x)^2 عدد اول وجود دارد؛ یعنی حداقل نصف تعداد مورد انتظار). من این را تنها بخاطر این انجام ندادم چون از آن خوشم می آمد، بلکه آن را انجام دادم چون بدون آن نمیتوانستم یک محدودهء خطا برای الگوریتم تصادفی خودم را ثابت کنم. بیشتر دانشمندان علوم رایانه بسادگی دستان خود را تکان میدهند و این فرض متداول را بعنوان پیشفرض قرار میدهند که اعداد اول به شکل تصادفی رفتار میکنند؛ اما با آموزش ریاضی که من دیده بودم، یک اثبات میخواستم که بر روی فرض های خارجی بنا نشده باشد.
Knuth بخاطر این گفته که «مراقب باگ ها در کد بالا باشید؛ من تنها ثابت کرده ام که آن درست است، اما آن را امتحان نکرده ام» مشهور است، و من با بیان ضمنی اینکه یک اثبات درستی برای اطمینان از اینکه کد درست عمل خواهد کرد کافی نیست مطلقا موافقم؛ اما، مهم است که ماهیت باگ هایی را که از چشم کسی که اثبات را مینویسد فرار میکنند مورد توجه قرار دهیم. این باگ ها -- که من فرض میکنم باگ های بالقوه ای بوده اند که Knuth درمورد آنها هشدار میداد -- بیشتر اشتباهاتی هستند موقع انتقال ایده ها از مغز به کیبورد: بطور مثال جا انداختن یک سمیکالن یا پرانتز، یا قاطی کردن نام دو متغییر. این باگها براحتی با حداقل میزان تست کردن پیدا میشوند. بنابراین نه تست و نه اثبات به تنهایی خیلی موثر نیستند، و در ترکیب هر دو است که تاثیر به حداکثر میرسد.
از این مهمتر، انواع حالتهای مرزی که ریاضیدان ها آموزش دیده اند تا موقع نوشتن یک اثبات به آنها فکر کنند دقیقا انواعی است که بیشتر مسائل امنیتی را موجب میشوند. تعداد خیلی کمی از مشکلات امنیتی موجود بصورت عمومی نتیجهء باگهایی هستند که مدام با آنها مواجه میشویم -- چنان باگ هایی مدت زمان زیادی باقی نمی مانند تا از نظر امنیتی مشکل جدی ایجاد کنند. بلکه مسائل امنیتی وقتی جدی میشوند که یک رخداد نادر پیشبینی نشده رخ میدهد -- بطور مثال یک ورودی ای که بطور غیرمنتظره بزرگ است، یک فایلی که خراب شده، یا یک اتصال شبکه که درست در زمان نامناسب بسته میشود. به این علت، من وقتی کدی که از نظر امنیتی حیاتی است مینویسم، عموما همانطور که پیش میروم یک اثبات تهیه میکنم؛ من تا حد نوشتن آن اثبات پیش نمیروم، اما با فکر کردن دربارهء اینکه چطور میتوانم اثبات کنم که آن کدها صحیح است، خودم را مجبور میکنم تا دربارهء تمام حالتهای مرزی که ممکن است بالقوه خطرناک باشند فکر کنم.
Bruce Schneier درست میگوید که امنیت نیازمند یک ذهنیت غیرعادی است؛ و درست میگوید که دانشکده های علوم کامپیوتر جای خوبی برای آموزش دادن این ذهنیت نیستند. اما او در اشتباه است که این ذهنیت نمیتواند آموزانده شود: اگر شما میخواهید کسی امنیت را درک کند، کافیست او را به مدت چهار سال به دانشکدهء ریاضی یک دانشگاه بفرستید.
منبع: http://www.daemonology.net/blog/2008...thematics.html
نکته: این ترجمه با مقداری حذف های جزیی میباشد.