یافتههای جدید حاکی از آن است که هوش مصنوعی با بررسی روش کدنویسی، توانایی تشخیص و شناسایی برنامهنویسهای ناشناس را نیز دارد.
محققان علم استیلومتری یا سبکشناسی از قدیم بر این باور بودند که نوشتن، یک فرآیند اختصاصی و منحصربهفرد است. به بیان دیگر لغات، ترکیب کلمات و انتخابهای دستورزبانی هر شخص، امضای شخصی او هستند. در حال حاضر ابزارهای خودکاری توسعه داده شده که توانایی تشخیص و شناسایی مولف یک پست در انجمنهای آنلاین را دارند. البته این ابزارها برای عملکرد عالی نیاز به دادههای کافی برای یادگیری دارند.
تحقیقات جدید نشان میدهد استیلومتری در نمونهی زبانهای مصنوعی مانند کدهای کامپیوتری نیز قابل اجرا است. به بیان دیگر به نظر میرسد توسعهدهندگان نرمافزار نیز، ردپایی خود را در کدهایشان بر جای میگذارند.حال با پیشرفتهای صورت گرفته در حوزهٔ ML، این امکان فراهم شده تا بتوان با استفاده از یادگیری ماشینی دست به شناسایی سورسکدهای مختلف زد حتی اگر کد مد نظر توسط یک دولوپر ناشناس نوشته شده باشد.
ML چگونه میتواند به درک سورسکد بپردازد؟
سیستم ماشین لرنینگی که محققان توسعه دادهاند میتواند از طریق تجزیه و تحلیل الگوهای موجود در سورسکدهای خام و یا حتی کدهای باینری کامپایلشده، برنامهنویس مربوطه را شناسایی کند بدین صورت که یک الگوریتم برای شناسایی الگوهای موجود در کدهای نوشتهشده توسط یک دولوپر به خصوص آموزش داده میشود و از آن برای تشخیص ویژگیهای مشابه در نمونه کدهای مختلف استفاده خواهد شد.این ویژگیهای شامل خصوصیتهای بسیار زیاد منحصربهفرد در کدها میشود. برای درک این تفاوتها کافی است نگاهی به جنبههای متنوع زبان طبیعی داشته باشیم. این جنبهها شامل کلماتی که بهکار میبریم، نحوهی چینش آنها، طول جملات و نحوهی بیان بستگی دارد. این دانشمندان پس از مرحلهی اول، به گلچین کردن ویژگیهای منحصربهفرد کدها پرداختند. آنها تنها ویژگیهایی را به کار گرفتند که در تشخیص توسعهدهندگان از یکدیگر مفید است. در نتیجه تعداد فاکتورهای از صدها هزار به حدود ۵۰ رسید.
بهترین قسمت قضیه این است که چنین سیستمی حتی نیازی به یک قطعه کد طولانی ندارد و با یک تکۀ کوچک از کدهای نوشتهشده توسط یک دولوپر نیز میتواند کار خود را انجام دهد. Rachel Greenstadt و Aylin Caliskan، محققانی که در این زمینه کار کردهاند، در یک سخنرانی در Defcon گفتند:
نتایج حاصل از این سیستم که مبتنی بر هوش مصنوعی هست تقریباً دقیقه هر چند که ادعایی بر اشتباهناپذیر بودنش وجود نداره.
محققان در طی یک آزمایش بر روی نمونههای کد از 600 برنامهنویس و از هر کدام 8 نمونه سورسکد، به نتیجۀ دقت تشخیص ٪83 رسیدهاند که به نظر درصد قابلقبولی میآید.
برای شناسایی، باید چند نمونه از کد قبلی برنامهنویس در اختیار داشته باشیم
این الگوریتم قطعا به نمونهای از کدهای پیشین برنامهنویسها نیاز دارد تا در زمان تشخیص کد مشابه، بتواند نویسنده را پیدا کند. در نتیجه اگر بهعنوان مثال یک حساب کاربری تصادفی در گیت هاب کدی را منتشر کنند، بهدلیل در دسترس نبودن نمونههای دیگر از نوشتههای این شخص، امکان شناسایی او وجود ندارد. البته محققان به رزومهی کامل برنامهنویس نیازی ندارند و تنها بخشی از کدهای پیشین او برای تشخیص کدهای بعدی کافی است.
این محققان در مقالهای که در سال ۲۰۱۷ منتشر شد،عنوان کردند که تنها تکهای کوچک از کد یک شخص در github برای تشخیص دادن او از دیگران کافی است و این فرآیند با دقت بالا نیز قابل انجام است. در مقالهای دیگر نیز ادعا شد که تنها با استفاده از کدهای باینری کامپایل شدهی یک برنامهنویس، میتوان کدهای بعدی او را شناسایی کرد. کامپایل باینری فرآیندی است که برنامهی نوشته شده را به ۰ و ۱ های قابل تشخیص توسط کامپیوتر تبدیل میکند.
در واقع این محققان میتوانند کد نوشته شده را بار دیگر به زبان ++C بازگردانده و سپس سبک منحصربهفرد برنامهنویس را نیز حفظ کنند. برای درک این حالت، نوشتن مقاله و ترجمه کردن آن توسط مترجم گوگل را در نظر بگیرید. پس از ترجمه، اگرچه زبان نوشتهی شما تغییر میکند اما ساختار منحصربهفرد و ترکیببندی مخصوص شما، به قوت خود باقی است. همین روند برای کدها نیز قابل استفاده است.
کالیسکان در این مورد میگوید:
( سبک نوشتاری همیشه حفظ میشود. وقتی افراد از یادگیری شخصی برای فرا گرفتن نوشتن استفاده میکنند، همیشه اثر انگشتی واضح بهصورت سبک نوشتاری از خود بر جای میگذارند.)
پیامدهای سرقت ادبی و حریم خصوصی
(میتوان سرقت و تقلب را در آزمونهای برنامهنویسی شناسایی کرد)
کالیسکان و گرینستاد معتقدند یافتههای آنها در تشخیص تقلب دانشآموزان، دانشجویان و حتی متقاضیان کار مفید است. محققان امنیتی نیز میتوانند با استفاده از این روش، سازندهی بدافزارهای را شناسایی کنند. در موقعیتهای دیگر، دولتها میتوانند توسعهدهندگان ابزارهای گذر از سانسور را شناسایی کنند. علاوه بر آن این تحقیق، پیامدهایی را نیز برای جامعهی متنباز دارد. خصوصا اگر آنها از یک حساب کاربری ثابت در سایتهایی مانند گیتهاب برای انتشار کدهایشان استفاده کنند. گرینستاد معتقد است مردم باید بدانند که پنهان کردن ۱۰۰ درصدی هویت در چنین مواردی غیرممکن است.
محققان حتی به این نکته رسیدند که برخی از ابزارهای پیچیدهسازی و امن کردن کدها نیز توانایی لازم برای مخفی کردن سبک خاص یک برنامهنویس را ندارند. در نهایت آنها معتقدند که احتمالا در آینده ابزارهای پیشرفتهتری برای مخفی کردن سبک نوشتن برنامهنویسها توسعه یابد.
گرینستاد در این مورد میگوید:
(با پیشرفت هرچه بیشتر تحقیقات ما، شاید بتوان روش پیچیدهسازی و امنسازی قابل اطمنیان برای پنهان کردن سبک برنامهنویسی را نیز کشف کرد. من اعتقاد ندارم که این مسیر، به قابل شناسایی بودن همهی آنچه که انجام میدهیم، بینجامد. البته در این مورد تنها امیدوار هستم.)
مزایا و معایب تشخیص امضای دولوپرها از روی سورسکد
این تکنولوژی مزایا و معایب خاص خود را دارد به طوری که از یک طرف میتواند برای تحقیقات قانونی مفید واقع شود، به خصوص در شناسایی دولوپرهای بدافزارهای مختلف و همچنین مجرمین سایبری مضاف بر اینکه میتواند در مسائلی حقوقی که بر سر #کپیرایت نیز اتفاق میافتد به کار رود چرا که یک سیستم مبتنی بر یادگیری ماشینی میتواند فرق بین شباهت یا تقلید و کپی کردن را متوجه شود.
در عین حال، جنبۀ منفی آن، این است که میتواند مشکلاتی را برای برنامهنویسانی که میخواهند کدهای ایشان ناشناس باقی بماند به وجود آورد به طوری که در برخی موارد دولوپرها نیاز به این دارند تا بنا به دلایلی، از جمله مسائل قانونی، ناشناس باقی بمانند و لو رفتن هویت ایشان لزوماً مسئله خوبی برایشان نیست و از همین روی هر گونه پیادهسازی این تکنولوژی باید بتواند یک توازن دقیق بین نیاز به امنیت و حفظ حریم خصوصی ایجاد کند.
آیا برنامهنویسهای کشورهای مختلف، سبک متفاوت دارند؟
در نتیجهای مشابه، کدهای نوشته شده برای مسائل بزرگتر و پیچیدهتر، قابلیت شناسایی بیشتری دارند. برای این منظور، الگوریتم ابتدا کدهای نوشته شده برای ۷ مسئلهی ساده را بررسی کرده و با دقت ۹۰ درصد، برنامهنویسها را شناسایی کرد. در آزمایش مشابه ۷ مسئلهی دشوار بیان شد و این بار دقت به ۹۵ درصد رسید.
محققان در تحقیقات آتی خود به دنبال شناسایی تاثیر فاکتورهای دیگر در سبک کدنویسی اشخاص هستند. بهعنوان مثال تاثیر همکاری اعضای یک سازمان در نوشتن یک برنامهی کامپیوتری، مورد بررسی قرار خواهد گرفت.
سوال دیگر این که آیا کشور محل زندگی برنامهنویس در نحوهی کدنویسی او تاثیر دارد؟ در یک بررسی اولیه، محققان به این نتیجه رسیدند که برنامهنویسهای کانادایی و چینی دقت شناسایی کدشان بیش از ۹۰ درصد است.