Graph Construction and Matching for Imperative Programs using Neural and Structural Methods
यह शोध पत्र एक ऐसे पाइपलाइन को प्रस्तुत करता है जो एब्स्ट्रैक्ट सिंटैक्स ट्री पार्सिंग को सिमेंटिक एम्बेडिंग्स के साथ एकीकृत करके, इम्पैरेटिव प्रोग्रामों और उनके एनोटेशन को एकीकृत, टाइप किए गए एट्रिब्यूटेड ग्राफ्स में परिवर्तित करता है, जिससे सत्यापन आर्टिफैक्ट्स के पुन: उपयोग को सुगम बनाने के लिए विभिन्न भाषाओं और एनोटेशन शैलियों के बीच सुसंगत ग्राफ प्रतिनिधित्व सक्षम होता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आपके पास विभिन्न प्रकार की मशीनें बनाने के लिए निर्देश नियमावली (instruction manuals) का एक विशाल पुस्तकालय है। कुछ अंग्रेजी में लिखी गई हैं, कुछ फ्रेंच में, और कुछ एक गुप्त कोड में। भले ही दो मशीनें बिल्कुल एक जैसा काम करती हों (जैसे "एक भारी बॉक्स उठाना"), उनके मैनुअल पूरी तरह से अलग दिख सकते हैं क्योंकि उपयोग की गई भाषा या लिखने की विशिष्ट शैली अलग हो सकती है।
समस्या यह है: जब आपको एक नई मशीन बनाने की आवश्यकता हो, तो पुन: उपयोग करने के लिए सही मैनुअल कैसे खोजें? आमतौर पर, एक इंसान को मिलान खोजने के लिए सैकड़ों पन्नों को पढ़ना पड़ता है, जो धीमा और निराशाजनक है।
यह शोध पत्र कंप्यूटर ग्राफ्स और AI का उपयोग करके इस समस्या को हल करने का एक स्मार्ट तरीका प्रस्तावित करता है। यहाँ उनके दृष्टिकोण का सरल उपमाओं (analogies) का उपयोग करके विवरण दिया गया है:
1. लक्ष्य: भीड़ में "जुड़वा" खोजना
शोधकर्ता "सत्यापन आर्टिफैक्ट्स" (verification artefacts) खोजना चाहते हैं। इन्हें सॉफ्टवेयर प्रोग्रामों के साथ जुड़े ब्लूप्रिंट, सुरक्षा जांच और गुणवत्ता गारंटी के रूप में समझें। वे जानना चाहते हैं: "क्या यह नया प्रोग्राम पुराने वाले जैसा ही दिखता है जिसे हमने पहले ही जांच लिया है?" यदि ऐसा है, तो हम शून्य से शुरुआत करने के बजाय पुराने सुरक्षा जांचों को पुन: उपयोग कर सकते हैं।
2. चुनौती: अलग भाषाएँ, समान तर्क
यह शोध पत्र इन सुरक्षा जांचों को लिखने के लिए तीन अलग-अलग "भाषाओं" को देखता है:
- C के साथ ACSL: जैसे किसी विशिष्ट नोटबुक शैली में रेसिपी लिखना।
- Java के साथ JML: जैसे उसी रेसिपी को एक अलग नोटबुक में थोड़ा अलग प्रतीकों के साथ लिखना।
- Dafny (C# के लिए): जैसे रेसिपी को बिना किसी अलग नोटबुक के सीधे खाना बनाने के निर्देशों में ही लिख देना।
भले ही वे एक ही काम करते हैं, लेकिन उनके प्रतीक और शब्द अलग दिखते हैं। एक कंप्यूटर आमतौर पर इन सतही अंतरों से भ्रमित हो जाता है।
3. समाधान: कोड को "आणविक मॉडल" में बदलना
कोड के शब्दों को पढ़ने के बजाय, शोधकर्ता कोड और उसके सुरक्षा नियमों को 3D आणविक मॉडलों (जिन्हें वे ग्राफ कहते हैं) में बदल देते हैं।
- नोड्स (परमाणु/Atoms): प्रोग्राम का हर हिस्सा (जैसे वेरिएबल, लूप, या सुरक्षा नियम) एक बिंदु बन जाता है।
- एजेस (बंध/Bonds): बिंदुओं को जोड़ने वाली रेखाएं दिखाती हैं कि वे एक-दूसरे से कैसे संबंधित हैं (जैसे "यह वेरिएबल उस लूप में फीड होता है")।
यह प्रोग्राम की संरचना का एक दृश्य मानचित्र (visual map) बनाता है। महत्वपूर्ण बात यह है कि वे केवल कोड का ही नहीं, बल्कि सुरक्षा नियमों (annotations) का भी उस मानचित्र पर चित्रण करते हैं।
4. सीक्रेट सॉस: मानचित्र को "मस्तिष्क" देना
एक मानचित्र अच्छा है, लेकिन वह अर्थ नहीं समझता। दो मानचित्र संरचनात्मक रूप से समान दिख सकते हैं लेकिन उनका अर्थ अलग हो सकता है। इसे ठीक करने के लिए, शोधकर्ता मानचित्र को "मस्तिष्क" देने के लिए AI मॉडल्स (विशेष रूप से SentenceTransformer और CodeBERT) का उपयोग करते हैं।
- उपमा: कल्पना कीजिए कि आप अपने आणविक मॉडल की फोटो लेते हैं और उसे एक सुपर-स्मार्ट अनुवादक के माध्यम से चलाते हैं। AI मॉडल उस टेक्स्ट को पढ़ता है जो मॉडल के भीतर है और उस ग्राफ के लिए एक डिजिटल फिंगरप्रिंट (वेक्टर) बनाता है जो कोड के अर्थ को पकड़ता है, न कि केवल उसके आकार को।
- अब, कंप्यूटर Java प्रोग्राम के "फिंगरप्रिंट" की तुलना C प्रोग्राम के "फिंगरप्रिंट" से कर सकता है। भले ही वे अलग दिखें, यदि उनके फिंगरप्रिंट मेल खाते हैं, तो कंप्यूटर जान जाता है कि वे अनिवार्य रूप से एक ही हैं।
5. प्रक्रिया: एक फैक्ट्री असेंबली लाइन
यह शोध पत्र एक पाइपलाइन (एक असेंबली लाइन) का वर्णन करता है जो इसे स्वचालित रूप से करता है:
- इनपुट: वे कच्चा कोड (C, Java, या C#) लेते हैं।
- अनुवाद: वे स्क्रिप्ट का उपयोग करके स्वचालित रूप से सुरक्षा नियम जोड़ते हैं यदि वे वहां मौजूद नहीं हैं, या कोड को विभिन्न भाषाओं में अनुवादित करते हैं।
- ग्राफ निर्माण: वे कोड को उन "आणविक मॉडलों" (ग्राफ) में बदलते हैं।
- AI संवर्धन (Enrichment): वे इन ग्राफ्स के लिए "फिंगरप्रिंट" उत्पन्न करने के लिए AI का उपयोग करते हैं।
- मिलान: वे फिंगरप्रिंट की तुलना करते हैं। यदि दो प्रोग्रामों के फिंगरप्रिंट समान हैं, तो वे एक मैच हैं।
6. उन्होंने क्या पाया
उन्होंने 56 अलग-अलग प्रोग्रामों (जैसे लिस्ट को सॉर्ट करना या नंबर खोजना) और उनके विविधताओं पर परीक्षण किया।
- परिणाम: सिस्टम ने सफलतापूर्वक तीनों भाषाओं के लिए ये ग्राफ मैप बनाए।
- मिलान: जब उन्होंने प्रोग्रामों की तुलना की, तो सिस्टम ने सही ढंग से पहचाना कि दो प्रोग्राम "जुड़वा" हैं (बहुत उच्च समानता स्कोर), भले ही एक C में लिखा गया हो और दूसरा Java में। इसने यह भी सही ढंग से पहचाना कि एक सॉर्टिंग प्रोग्राम और एक सर्चिंग प्रोग्राम "जुड़वा" नहीं हैं (कम समानता स्कोर)।
7. कमी (सीमाएँ)
लेखक अपनी कमियों के बारे में ईमानदार हैं:
- "Regex" की समस्या: सिस्टम ग्राफ बनाने के लिए सरल पैटर्न-मैचिंग नियमों (जैसे "फाइंड एंड रिप्लेस" टूल) का उपयोग करता है। यह तेज़ है, लेकिन यदि कोड अव्यवस्थित या अजीब तरीके से लिखा गया है, तो सिस्टम कोई विवरण मिस कर सकता है।
- AI का ज्ञान: उपयोग किए गए AI मॉडल सामान्य उद्देश्य के लिए हैं। उन्हें विशेष रूप से कोड के लिए "वकील" बनने के लिए प्रशिक्षित नहीं किया गया है। वे सुरक्षा नियमों में बहुत सूक्ष्म अंतरों को मिस कर सकते हैं जिन्हें एक मानव विशेषज्ञ पकड़ लेगा।
सारांश
संक्षेप में, इस शोध पत्र ने सॉफ्टवेयर सुरक्षा जांचों के लिए एक यूनिवर्सल ट्रांसलेटर और मैचर बनाया है। कोड और उसके नियमों को संरचित मानचित्रों में बदलकर और फिर उन मानचित्रों को AI-जनरेटेड अर्थ देकर, उन्होंने दिखाया कि कंप्यूटर विभिन्न प्रोग्रामिंग भाषाओं के बीच समान सॉफ्टवेयर को ढूंढ सकते हैं। यह डेवलपर्स का समय बचाने और सॉफ्टवेयर को सुरक्षित बनाने के लिए सुरक्षा जांचों को स्वचालित रूप से पुन: उपयोग करने के भविष्य की ओर एक पहला कदम है।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।