شناسه منحصر به فرد جهانی

از ویکیپدیا، دانشنامه آزاد
پرش به ناوبری پرش به جستجو

UUID/GUID همانطور که توسط متغیرهای UEFI استفاده می شود

یک شناسه منحصر به فرد جهانی ( UUID ) یک برچسب 128 بیتی است که برای اطلاعات در سیستم های کامپیوتری استفاده می شود. اصطلاح شناسه منحصر به فرد جهانی ( GUID ) نیز اغلب در نرم افزارهای ایجاد شده توسط مایکروسافت استفاده می شود . [1]

زمانی که UUID ها طبق روش های استاندارد تولید می شوند، برای اهداف عملی، منحصر به فرد هستند. منحصر به فرد بودن آنها به یک مرجع ثبت مرکزی یا هماهنگی بین طرف های تولید کننده آنها بستگی ندارد، برخلاف اکثر طرح های شماره گذاری دیگر. در حالی که احتمال تکراری شدن یک UUID صفر نیست، اما آنقدر به صفر نزدیک است که قابل اغماض باشد. [2] [3]

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

پذیرش UUID ها گسترده است، با بسیاری از پلتفرم های محاسباتی برای تولید آنها و تجزیه نمایش متنی آنها پشتیبانی می کنند.

تاریخچه

در دهه 1980، كامپيوتر آپولو ابتدا از UUID ها در سيستم محاسباتي شبكه (NCS) و بعداً در محيط محاسبات توزيع شده (OSF) بنياد نرم افزار باز (OSF ) استفاده كرد. طراحی اولیه UUID های DCE بر اساس UUID های NCS بود، [4] که طراحی آن به نوبه خود از شناسه های منحصر به فرد ( 64 بیتی ) الهام گرفته شده بود که به طور فراگیر در Domain/OS استفاده می شد ، یک سیستم عامل طراحی شده توسط Apollo Computer. بعداً، [ کی؟ ] مایکروسافت ویندوز سیستم عامل طراحی DCE به عنوان "شناسه منحصر به فرد جهانی" (GUID ها) به تصویب رسید. RFC 4122 یک URN ثبت کردفضای نام برای UUID ها [1] و مشخصات قبلی را با همان محتوای فنی خلاصه می کند. [ نیازمند منبع ] هنگامی که در جولای 2005 RFC 4122 به عنوان یک استاندارد پیشنهادی IETF منتشر شد ، ITU همچنین UUID ها را بر اساس استانداردهای قبلی و نسخه های اولیه RFC 4122 استاندارد کرده بود. [ نیازمند منبع ]

استانداردها

UUID ها توسط بنیاد نرم افزار باز (OSF) به عنوان بخشی از محیط محاسبات توزیع شده (DCE) استاندارد شده اند. [5] [6]

UUID ها به عنوان بخشی از ISO / IEC 11578:1996 " فناوری اطلاعات  - اتصال سیستم های باز - فراخوان رویه از راه دور (RPC)" و اخیراً در ITU-T Rec مستند شده اند. X.667 | ISO / IEC 9834-8:2005. [7]

نیروی ضربت مهندسی اینترنت (IETF) RFC 4122 استاندارد-آهنگ منتشر شده است، [1] از لحاظ فنی معادل ITU-T پیشنهادی از X.667 | ISO/IEC 9834-8.

قالب

در نمایش متنی متعارف خود، 16 اکتت یک UUID به صورت 32 رقم هگزا دسیمال (پایه-16) نمایش داده می شود که در پنج گروه جدا شده با خط فاصله، به شکل 8-4-4-4-12 برای مجموع 36 کاراکتر نمایش داده می شود. (32 کاراکتر هگزادسیمال و 4 خط فاصله). مثلا:

123e4567-e89b-12d3-a456-426614174000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

فیلدهای چهار بیتی M و 1 تا 3 بیتی N فرمت خود UUID را کد می کنند.

چهار بیت رقمی Mنسخه UUID است و 1 تا 3 بیت رقمی که مهم‌ترین آن Nاست، نوع UUID را کد می‌کند. (به زیر مراجعه کنید. ) در مثال، M است 1، و N است a(10xx 2 )، به این معنی که این یک UUID نسخه 1، واریانت-1 است. یعنی یک UUID مبتنی بر زمان DCE/RFC 4122.

رشته فرمت متعارف 8-4-4-4-12 بر اساس طرح رکورد برای 16 بایت UUID است: [1]

طرح بندی رکورد UUID
نام طول (بایت) طول (ارقام شش گوش) طول (بیت) فهرست
زمان_کم 4 8 32 عدد صحیح که 32 بیت کم زمان را می دهد
time_mid 2 4 16 عدد صحیح که 16 بیت زمان را به وسط می دهد
time_hi_and_version 2 4 16 "نسخه" 4 بیتی در مهم ترین بیت ها و به دنبال آن 12 بیت بالا زمان
clock_seq_hi_and_res clock_seq_low 2 4 16 "نوع" 1 تا 3 بیتی در مهم ترین بیت ها و به دنبال آن دنباله ساعت 13 تا 15 بیتی
گره 6 12 48 شناسه گره 48 بیتی

این فیلدها با موارد موجود در UUID های نسخه 1 و 2 (یعنی UUID های مبتنی بر زمان) مطابقت دارند، اما همان نمایش 8-4-4-4-12 برای همه UUID ها، حتی برای UUID هایی که به طور متفاوت ساخته شده اند، استفاده می شود.

RFC 4122 بخش 3 مستلزم آن است که کاراکترها با حروف کوچک تولید شوند، در حالی که در ورودی به حروف بزرگ و کوچک حساس نیستند.

GUID های مایکروسافت گاهی اوقات با بریس های اطراف نشان داده می شوند:

{123e4567-e89b-12d3-a456-426652340000}

این فرمت را نباید با " فرمت رجیستری ویندوز " اشتباه گرفت ، که به فرمت درون پرانتزهای فرفری اشاره دارد . [8]

RFC 4122 یک فضای نام یکنواخت منبع (URN) را برای UUID ها تعریف می کند. UUID ارائه شده به عنوان یک URN به صورت زیر ظاهر می شود: [1]

urn:uuid:123e4567-e89b-12d3-a456-426655440000

رمزگذاری

رمزگذاری باینری UUID ها بین سیستم ها متفاوت است. UUID های نوع 1 که امروزه رایج ترین نوع هستند، در قالب بزرگ-اندیان کدگذاری می شوند . به عنوان مثال، 00112233-4455-6677-8899-aabbccddeeffبه عنوان بایت کدگذاری می شود 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff. [9] [10]

UUIDهای نوع 2، که به طور تاریخی در کتابخانه‌های COM/OLE مایکروسافت استفاده می‌شد، از یک قالب ترکیبی استفاده می‌کردند که به موجب آن، سه مؤلفه اول UUID کمی endian و دو مؤلفه آخر Big-Endi هستند . به عنوان مثال، 00112233-4455-6677-8899-aabbccddeeffبه عنوان بایت کدگذاری می شود 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff. [11] [12]

انواع

فیلد "نوعی" UUID یا موقعیت N فرمت و رمزگذاری آنها را نشان می دهد. RFC 4122 چهار نوع طول 1 تا 3 بیت را تعریف می کند:

  • نوع 0 (که با الگوی یک بیتی 0xxx 2 ، N  = نشان داده شده است  0..7) برای سازگاری با سیستم محاسباتی شبکه آپولو منسوخ شده است.فرمت 1.5 UUID در حدود سال 1988 توسعه یافت. 6 اکتت اول UUID یک مهر زمانی 48 بیتی است (تعداد واحدهای زمان 4 میکروثانیه از 1 ژانویه 1980 UTC). 2 اکتت بعدی رزرو شده است. اکتت بعدی "خانواده آدرس" است. و 7 اکتت نهایی یک شناسه میزبان 56 بیتی به شکل مشخص شده توسط خانواده آدرس هستند. اگرچه در جزئیات متفاوت است، اما شباهت با UUID های مدرن نسخه 1 مشهود است. بیت های متغیر در مشخصات UUID فعلی با بیت های بالای هشت خانواده آدرس در UUID های NCS منطبق است. اگرچه خانواده آدرس می تواند مقادیری را در محدوده 0..255 نگه دارد، اما تنها مقادیر 0..13 تا کنون تعریف شده است. بر این اساس، الگوی بیت 0 نوع 0xxxاز درگیری با UUID های NCS تاریخی، در صورتی که هنوز در پایگاه داده وجود داشته باشد، جلوگیری می کند. [13]
  • نوع 1 (10xx 2 ، N  =  8..b، 2 بیت) به عنوان UUIDهای RFC 4122/DCE 1.1 یا UUIDهای "Leach–Salz" به نام نویسندگان پیش نویس اینترنتی اصلی نامیده می شود .
  • نوع 2 (110X 2 ، N  =  c..d، 3 بیت) در RFC عنوان "محفوظ است، شرکت مایکروسافت سازگاری" مشخص و برای GUID ها در اوایل استفاده شد مایکروسافت ویندوز پلت فرم. تفاوت آن با نوع 1 فقط به دلیل پایانی بودن در ذخیره سازی یا انتقال باینری است: UUID های variant-1 از ترتیب بایت "شبکه" (بزرگ-اندیان) استفاده می کنند، در حالی که GUID های نوع 2 از ترتیب بایت های "بومی" (کوچک endian) برای برخی از زیرفیلدها استفاده می کنند. از UUID.
  • محفوظ است که به عنوان 3 بیتی الگوی بیتی نوع 111x تعریف 2 ( N  =  e..f).

انواع 1 و 2 توسط مشخصات UUID فعلی استفاده می شود. در نمایش های متنی آنها، انواع 1 و 2 به جز بیت های واریانت یکسان هستند. در نمایش باینری، یک تفاوت endianness وجود دارد. [1] هنگامی که برای تبدیل بین مرتبه بایت اندین بزرگ نوع 1 و مرتبه بایت اندین کوچک از نوع 2 نیاز به تعویض بایت است، فیلدهای بالا مبادله را مشخص می کنند. سه فیلد اول اعداد صحیح 32 و 16 بیتی بدون علامت هستند و قابل تعویض هستند، در حالی که دو فیلد آخر از بایت های تفسیر نشده تشکیل شده اند و مشمول تعویض نیستند. این تعویض بایت حتی برای نسخه‌های 3، 4 و 5 نیز اعمال می‌شود، جایی که فیلدهای متعارف با محتوای UUID مطابقت ندارند. [1]

در حالی که برخی از GUID های مهم، مانند شناسه رابط Component Object Model IUnknown ، اسماً UUID های نوع 2 هستند، بسیاری از شناسه هایی که در نرم افزار مایکروسافت ویندوز تولید و استفاده می شوند و به عنوان "GUID" نامیده می شوند، نوع استاندارد RFC 4122/DCE 1.1 هستند. UUID های بایتی شبکه، به جای UUID های نوع ۲ کمی اندون. نسخه فعلی guidgenابزار مایکروسافت UUID های استاندارد نوع 1 را تولید می کند. برخی از اسناد مایکروسافت بیان می کنند که "GUID" مترادف "UUID" است، [14]همانطور که در RFC 4122 استاندارد شده است. خود RFC 4122 بیان می کند که UUID ها "به عنوان GUID نیز شناخته می شوند". همه اینها نشان می دهد که "GUID"، در حالی که در ابتدا به نوعی از UUID که توسط مایکروسافت استفاده می شد اشاره می کرد، به سادگی به یک نام جایگزین برای UUID تبدیل شده است، با هر دو نوع GUID و نوع 2 موجود است.

نسخه ها

برای هر دو نوع 1 و 2، پنج "نسخه" در استانداردها تعریف شده است و هر نسخه ممکن است در موارد استفاده خاص مناسب تر از نسخه های دیگر باشد. نسخه با علامت Mدر نمایش رشته نشان داده می شود.

UUID های نسخه 1 از یک شناسه زمان و یک گره (معمولاً آدرس MAC ) تولید می شوند. نسخه 2 UUID ها از یک شناسه (معمولاً شناسه گروه یا کاربر)، زمان و شناسه گره تولید می شوند. نسخه‌های 3 و 5 UUID‌های قطعی تولید می‌کنند که با هش کردن یک شناسه و نام فضای نام تولید می‌شوند. و UUID های نسخه 4 با استفاده از یک عدد تصادفی یا شبه تصادفی تولید می شوند .

UUID صفر

UUID "nil"، یک مورد خاص، UUID است 00000000-0000-0000-0000-000000000000. یعنی همه بیت ها روی صفر تنظیم می شوند. [1]

نسخه 1 (تاریخ زمان و آدرس MAC)

نسخه 1 آدرس MAC 48 بیتی "گره" (یعنی رایانه ای که UUID را تولید می کند) را با یک مهر زمانی 60 بیتی که تعداد بازه های 100 نانوثانیه ای از نیمه شب 15 اکتبر 1582 به وقت جهانی هماهنگ (UTC) است به هم متصل می کند. )، تاریخی که برای اولین بار تقویم میلادی در آن به تصویب رسید. RFC 4122 بیان می‌کند که مقدار زمان در حدود 3400 بعد از میلاد می‌چرخد، [1] :  3 بسته به الگوریتم مورد استفاده، که به این معنی است که مهر زمانی 60 بیتی یک کمیت علامت‌دار است. با این حال برخی از نرم‌افزارها، مانند کتابخانه libuuid، مهر زمانی را بدون امضا در نظر می‌گیرند و زمان rollover را در سال 5236 پس از میلاد قرار می‌دهند. [15] زمان rollover که توسط ITU-T Rec تعریف شده است. X.667 3603 بعد از میلاد است.[16] :  v

توالی ساعت 13 یا 14 بیتی "یکسان سازی" مهر زمانی را گسترش می دهد تا مواردی را که در آن ساعت پردازنده به اندازه کافی سریع پیش نمی رود، یا در جایی که چندین پردازنده و ژنراتور UUID در هر گره وجود دارد، رسیدگی کند. هنگامی که UUIDها سریعتر از سرعت پیشروی ساعت سیستم تولید می شوند، بیت های پایینی از فیلدهای مهر زمانی را می توان با افزایش هر بار که UUID در حال تولید است، برای شبیه سازی مهر زمانی با وضوح بالا تولید کرد. با هر نسخه 1 UUID که مربوط به یک نقطه در فضا (گره) و زمان (فاصله ها و ترتیب ساعت) است، احتمال اینکه دو UUID نسخه-1 به درستی تولید شده باشند، به طور ناخواسته یکسان باشند، عملاً صفر است. از آنجایی که ترتیب زمان و ساعت در مجموع 74 بیت است، 2 74 (1.8 × 10 22)، یا 18 60000000 UUID نسخه 1 را می توان در هر شناسه گره، با حداکثر نرخ متوسط ​​163 میلیارد در ثانیه در هر شناسه گره تولید کرد. [1]

برخلاف سایر نسخه‌های UUID، نسخه ۱ و ۲ UUID مبتنی بر آدرس‌های MAC از کارت‌های شبکه برای منحصر به فرد بودن خود تا حدی به شناسه صادر شده توسط مرجع ثبت مرکزی، یعنی شناسه منحصر به فرد سازمانی (OUI) بخشی از آدرس MAC وابسته است. که توسط IEEE برای سازندگان تجهیزات شبکه صادر می شود . [17] منحصربه‌فرد بودن UUID‌های نسخه 1 و نسخه 2 مبتنی بر آدرس‌های MAC کارت شبکه نیز به این بستگی دارد که سازندگان کارت شبکه به درستی آدرس‌های MAC منحصربه‌فرد را به کارت‌های خود اختصاص دهند، که مانند سایر فرآیندهای تولید در معرض خطا است. بعلاوه برخی از سیستم عامل ها به کاربر نهایی اجازه می دهند تا آدرس MAC را سفارشی کند، به ویژه OpenWRT . [18]

استفاده از آدرس MAC کارت شبکه گره برای شناسه گره به این معنی است که UUID نسخه 1 را می توان به رایانه ای که آن را ایجاد کرده است ردیابی کرد. گاهی اوقات می‌توان اسناد را در رایانه‌هایی که از طریق UUID‌های تعبیه‌شده در آن‌ها توسط نرم‌افزار پردازش کلمه ایجاد یا ویرایش شده‌اند، ردیابی کرد . این حفره حریم خصوصی هنگام تعیین مکان سازنده ویروس ملیسا استفاده شد . [19]

RFC 4122 اجازه می دهد تا آدرس MAC در یک UUID نسخه 1 (یا 2) با یک شناسه گره تصادفی 48 بیتی جایگزین شود، یا به این دلیل که گره آدرس MAC ندارد یا به دلیل اینکه مطلوب نیست که آن را در معرض نمایش قرار دهیم. در آن صورت، RFC مستلزم آن است که بیت کم ارزش هشتایی اول ID گره باید به 1. مجموعه [1] این مربوط به چندپخشی کمی در آدرس های MAC، و تنظیم آن به UUIDs افتراق خدمت که در آن ID گره به طور تصادفی از UUID ها بر اساس آدرس های MAC از کارت های شبکه، که معمولا دارای آدرس های MAC unicast هستند ، تولید می شود. [1]

نسخه 2 (تاریخ زمان و آدرس MAC، نسخه امنیتی DCE)

RFC 4122 نسخه 2 را برای UUID های "DCE Security" ذخیره می کند. اما هیچ جزئیاتی ارائه نمی دهد. به همین دلیل، بسیاری از پیاده سازی های UUID نسخه 2 را حذف می کنند. با این حال، مشخصات UUID های نسخه 2 توسط مشخصات DCE 1.1 Authentication and Security Services ارائه شده است. [6]

UUID های نسخه 2 مشابه نسخه 1 هستند، با این تفاوت که 8 بیت کم اهمیت از دنباله ساعت با یک عدد "دامنه محلی" جایگزین می شود و کمترین 32 بیت از مهر زمانی با یک شناسه عدد صحیح با معنی در محدوده مشخص شده جایگزین می شود. دامنه محلی در سیستم‌های POSIX ، شماره‌های دامنه محلی 0 و 1 به ترتیب برای شناسه‌های کاربر ( UID ) و شناسه‌های گروه ( GID ) هستند و سایر شماره‌های دامنه محلی توسط سایت تعریف می‌شوند. [6] در سیستم‌های غیر POSIX، همه شماره‌های دامنه محلی توسط سایت تعریف می‌شوند.

توانایی گنجاندن یک دامنه/شناسه 40 بیتی در UUID با یک مبادله همراه است. از یک طرف، 40 بیت حدود 1 تریلیون ارزش دامنه/شناسه را در هر شناسه گره اجازه می دهد. از سوی دیگر، با کاهش مقدار ساعت به 28 بیت مهم، در مقایسه با 60 بیت در نسخه 1، ساعت در نسخه 2 UUID تنها یک بار در هر 429.49 ثانیه، کمی بیشتر از 7 دقیقه، "تیک" می کند. برخلاف هر 100 نانوثانیه برای نسخه 1. و با دنباله ساعت تنها 6 بیت، در مقایسه با 14 بیت در نسخه 1، تنها 64 UUID منحصر به فرد در هر گره/دامنه/شناسه می تواند در هر تیک ساعت 7 دقیقه ای تولید شود، در مقایسه با 16384. مقادیر دنباله ساعت برای نسخه 1. [20] بنابراین، نسخه 2 ممکن است برای مواردی که UUID در هر گره/دامنه/شناسه، با سرعتی بیش از یک در هر هفت دقیقه مورد نیاز است، مناسب نباشد.

نسخه 3 و 5 (بر اساس نام فضای نام)

نسخه 3 و نسخه 5 UUIDs توسط تولید هش فضای نام شناسه و نام. نسخه 3 از MD5 به عنوان الگوریتم هش استفاده می کند و نسخه 5 از SHA-1 استفاده می کند . [1]

شناسه فضای نام خود یک UUID است. این مشخصات UUIDهایی را برای نشان دادن فضاهای نام URL ها ، نام های دامنه کاملاً واجد شرایط ، شناسه های شی و نام های متمایز X.500 فراهم می کند . اما هر UUID مورد نظر ممکن است به عنوان یک نام فضای نام استفاده شود.

برای تعیین UUID نسخه 3 مربوط به فضای نام و نام معین، UUID فضای نام به رشته ای از بایت تبدیل می شود که با نام ورودی الحاق می شود، سپس با MD5 هش می شود و 128 بیت به دست می آید. سپس 6 یا 7 بیت با مقادیر ثابت جایگزین می شوند، نسخه 4 بیتی (مثلاً 0011 2 برای نسخه 3)، و «نوع» UUID 2 یا 3 بیتی (مثلاً 10 2 نشان دهنده یک UUID RFC 4122 یا 110 2 است. نشان دهنده یک Microsoft GUID قدیمی). از آنجایی که 6 یا 7 بیت از پیش تعیین شده اند، تنها 121 یا 122 بیت به منحصر به فرد بودن UUID کمک می کنند.

UUID های نسخه 5 مشابه هستند، اما SHA-1 به جای MD5 استفاده می شود. از آنجایی که SHA-1 خلاصه‌های 160 بیتی را تولید می‌کند، قبل از جایگزینی نسخه و بیت‌های مختلف، خلاصه به 128 بیت کوتاه می‌شود.

UUID های نسخه 3 و نسخه 5 این ویژگی را دارند که فضای نام و نام یکسان به همان UUID نگاشت می شود. با این حال، نه فضای نام و نه نام را نمی توان از UUID تعیین کرد، حتی اگر یکی از آنها مشخص شده باشد، مگر با جستجوی brute-force. RFC 4122 نسخه 5 (SHA-1) را نسبت به نسخه 3 (MD5) توصیه می کند و در مورد استفاده از UUID هر یک از نسخه ها به عنوان اعتبارنامه امنیتی هشدار می دهد. [1]

نسخه 4 (تصادفی)

نسخه 4 UUID به طور تصادفی تولید می شود. مانند سایر UUID ها، 4 بیت برای نشان دادن نسخه 4، و 2 یا 3 بیت برای نشان دادن نوع استفاده می شود (به ترتیب 10 2 یا 110 2 برای انواع 1 و 2). بنابراین، برای نوع 1 (یعنی اکثر UUID ها) یک UUID تصادفی نسخه 4 دارای 6 بیت نسخه و نسخه از پیش تعیین شده خواهد بود، که 122 بیت برای قسمت تولید شده به طور تصادفی باقی می ماند، در مجموع 2 122 یا 5.3 × 10 36 (5.3).  undecilion ) نسخه ممکن نسخه-4 نوع-1 UUID. نصف تعداد نسخه 4 نسخه 2 UUID (GUID های قدیمی) وجود دارد، زیرا یک بیت تصادفی کمتر در دسترس است و 3 بیت برای نوع مصرف می شود.

برخوردها

تصادم زمانی رخ می دهد که یک UUID یکسان بیش از یک بار تولید شده و به ارجاع های مختلف اختصاص داده شود. در مورد UUID های استاندارد نسخه 1 و نسخه 2 که از آدرس های MAC منحصر به فرد از کارت های شبکه استفاده می کنند، احتمال تصادم وجود ندارد، با احتمال افزایش تنها زمانی که پیاده سازی با استانداردها متفاوت باشد، سهوا یا عمدا.

برخلاف UUID های نسخه 1 و 2 که با استفاده از آدرس های MAC تولید می شوند، با UUID های نسخه 1 و 2 که از شناسه های گره تولید شده به طور تصادفی استفاده می کنند، UUID های مبتنی بر هش نسخه 3 و نسخه 5 و UUID های تصادفی نسخه 4، تصادم می تواند حتی بدون مشکلات پیاده سازی رخ دهد، البته با احتمال آنقدر کوچک که معمولاً می توان آن را نادیده گرفت. این احتمال را می توان دقیقاً بر اساس تجزیه و تحلیل مسئله تولد محاسبه کرد . [21]

به عنوان مثال، تعداد UUID های تصادفی نسخه 4 که باید برای داشتن 50 درصد احتمال حداقل یک برخورد تولید شوند، 2.71 کوئینتیلیون است که به صورت زیر محاسبه می شود: [22]

این عدد معادل تولید 1 میلیارد UUID در ثانیه برای حدود 85 سال است. یک فایل حاوی این تعداد UUID، با 16 بایت در هر UUID، حدود 45  اگزابایت خواهد بود.

کوچکترین تعداد UUIDهای نسخه 4 که باید برای یافتن یک برخورد p تولید شوند با فرمول تقریبی می شوند.

بنابراین، احتمال یافتن یک نسخه تکراری در 103 تریلیون نسخه 4 UUID یک در یک میلیارد است.

استفاده می کند

کاربردهای مهم عبارتند از ext2 / ext3 / ext4 ابزار فضای کاربران سیستم فایل ( e2fsprogs از libuuid ارائه شده توسط util -linux استفاده می کندLVM ، پارتیشن های رمزگذاری شده LUKS ، GNOME ، KDE و macOS ، [23] که بیشتر آنها از پیاده سازی اصلی توسط Theodore Ts مشتق شده اند. 'o . [15]

یکی از کاربردهای UUID در سولاریس (با استفاده از پیاده‌سازی Open Software Foundation) شناسایی یک نمونه سیستم عامل در حال اجرا به منظور جفت کردن داده‌های خرابی خراب با رویداد مدیریت خطا در صورت وحشت هسته است. [24]

در COM

چندین نوع از GUID ها در مدل کامپوننت شی مایکروسافت (COM) استفاده می شود:

  • ID – شناسه رابط؛ (آنهایی که در یک سیستم ثبت شده اند در رجیستری ویندوز در [HKEY_CLASSES_ROOT\Interface][25] ذخیره می شوند )
  • CLSID – شناسه کلاس؛ (ذخیره شده در [HKEY_CLASSES_ROOT\CLSID])
  • LIBID - نوع شناسه کتابخانه. (ذخیره شده در [HKEY_CLASSES_ROOT\TypeLib][26] )
  • CATID - شناسه دسته؛ (حضور آن در یک کلاس نشان می‌دهد که متعلق به دسته‌های کلاس خاصی است که در [HKEY_CLASSES_ROOT\Component Categories][27] فهرست شده است )

به عنوان کلیدهای پایگاه داده

UUID ها معمولا به عنوان یک کلید منحصر به فرد در جداول پایگاه داده استفاده می شوند. NEWID تابع در SQL سرور مایکروسافت نسخه 4 Transact-SQL را می گرداند استاندارد تصادفی نسخه 4 UUIDs، در حالی که NEWSEQUENTIALID تابع شناسه 128-کمی شبیه به UUIDs که به صعود در دنباله تا راه اندازی مجدد سیستم بعدی متعهد است. [28] پایگاه داده اوراکل SYS_GUID تابع یک GUID استاندارد با وجود نام نمی گرداند،. در عوض، یک مقدار 128 بیتی RAW 16 بایتی بر اساس شناسه میزبان و شناسه فرآیند یا رشته، تا حدودی شبیه به یک GUID، برمی‌گرداند. [29] PostgreSQL شامل یک نوع داده UUID [30] و می تواند اکثر نسخه های UUID را از طریق استفاده از توابع از ماژول ها تولید کند. [31] [32] MySQL یک تابع UUID را ارائه می دهد که UUID های استاندارد نسخه 1 را تولید می کند. [33]

ماهیت تصادفی UUIDهای استاندارد نسخه‌های 3، 4، و 5 و ترتیب فیلدها در نسخه‌های استاندارد 1 و 2 ممکن است هنگام استفاده از UUIDها به‌عنوان کلیدهای اصلی، مشکلاتی را در محل یا عملکرد پایگاه داده ایجاد کند . به عنوان مثال، در سال 2002، جیمی نیلسون بهبود قابل توجهی در عملکرد با مایکروسافت SQL Server گزارش کرد، زمانی که UUID های نسخه 4 که به عنوان کلید استفاده می شدند، برای گنجاندن پسوند غیر تصادفی بر اساس زمان سیستم تغییر یافتند. همانطور که نیلسون اذعان کرد، این رویکرد به اصطلاح "COMB" (ترکیب زمان-GUID) UUID ها را غیر استاندارد و به طور قابل توجهی احتمال تکرار آنها را افزایش داد، اما نیلسون فقط به منحصر به فرد بودن در برنامه نیاز داشت. [34]با مرتب‌سازی مجدد و کدگذاری نسخه‌های 1 و 2 UUID به‌گونه‌ای که مهر زمانی اول باشد، می‌توان از کاهش عملکرد درج جلوگیری کرد. [35]

برخی از چارچوب‌های وب، مانند لاراول، از UUID‌های "مهر زمانی" پشتیبانی می‌کنند که ممکن است به طور موثر در یک ستون پایگاه داده فهرست‌شده ذخیره شوند. این یک UUID COMB را با استفاده از فرمت نسخه 4 می سازد، اما در جایی که 48 بیت اول یک مهر زمانی را تشکیل می دهند که مانند UUIDv1 تنظیم شده است. [36] [37] فرمت‌های مشخص‌تر بر اساس ایده COMB UUID عبارتند از:

  • "ULID" که 4 بیت مورد استفاده برای نشان دادن نسخه 4 را حذف می کند، به طور پیش فرض از یک رمزگذاری base32 استفاده می کند و یکنواختی کامل را با حالت حالت الزامی می کند. [38]
  • نسخه های UUID 6 تا 8، یک پیشنهاد رسمی از سه فرمت COMB UUID. [39]

همچنین ببینید

منابع

  1. ^ a b c d e f g h i j k l m n لیچ، پی. میلینگ، م. سالز، آر (2005). فضای نام URN شناسه جهانی منحصر به فرد (UUID) . نیروی ضربت مهندسی اینترنت . doi : 10.17487/RFC4122 . RFC 4122 . بازبینی شده در 17 ژانویه 2017 .
  2. «شناسه‌های منحصربه‌فرد جهانی (UUID)» . H2 . بازبینی شده در 21 مارس 2021 .
  3. ^ توصیه ITU-T X.667 : تولید و ثبت شناسه های منحصر به فرد جهانی (UUID) و استفاده از آنها به عنوان اجزای شناسه شی ASN.1 . استاندارد. اکتبر 2012.
  4. زان، لیزا (1990). معماری محاسبات شبکه . سالن . پ. 10. شابک 978-0-13-611674-5.
  5. «CDE 1.1: Remote Procedure Call» . گروه باز 1997.
  6. ^ a b c "DCE 1.1: Authentication and Security Services" . گروه باز 1997.
  7. "گروه مطالعاتی ITU-T 17 - شناسه های شی (OID) و توصیه های مقامات ثبت" . ITU.int . بازبینی شده در 20 دسامبر 2016 .
  8. «کلیدهای رجیستری و ورودی‌های فروشگاه اینترنتی نوع 1» . شبکه توسعه دهنده مایکروسافت . مایکروسافت .
  9. ^ استیل، نیک. "شکستن UUID ها" .
  10. ^ "نسخه های UUID توضیح داده شده" .
  11. ^ لیچ، پل. "UUID ها و GUID ها" .
  12. «روش Guid.ToByteArray» .
  13. ^ "uuid.c" .
  14. «شناسه‌های منحصربه‌فرد جهانی» . شبکه توسعه دهنده مایکروسافت . مایکروسافت .
  15. ^ a b "ext2/e2fsprogs.git - ابزارهای فضای کاربران فایل سیستم Ext2/3/4" . Kernel.org . بازیابی شده در 9 ژانویه 2017 .
  16. «توصیه ITU-T X.667» (PDF) . www.itu.int . اکتبر 2012 . بازیابی شده در 19 دسامبر 2020 .
  17. « مرجع ثبت» . انجمن استاندارد IEEE .
  18. «تنظیم آدرس MAC» . OpenWRT . 15 سپتامبر 2021.
  19. ریتر، لوک (2 آوریل 1999). "ردیابی Alter Egos ملیسا" . ZDNet . CBS Interactive . بازبینی شده در 16 ژانویه 2017 .
  20. کوچلینگ، AM « چه‌های جدید در پایتون 2.5» . Python.org . بازبینی شده در 23 ژانویه 2016 .
  21. ^ عیسی، پائولو؛ باکورو، کارلوس؛ آلمائیدا، پائولو. "تولید شناسه در محیط های موبایل" (PDF) . Repositorium.Sdum.Uminho.pt .
  22. ماتیس، فرانک اچ. (ژوئن 1991). "مشکل تعمیم یافته تولد". بررسی SIAM . 33 (2): 265-270. CiteSeerX 10.1.1.5.5851 . doi : 10.1137/1033051 . ISSN 0036-1445 . JSTOR 2031144 . OCLC 37699182 .    
  23. ^ gen_uuid.c در Libc-391 اپل، مربوط به Mac OS X 10.4
  24. «تجدید ساختار Crashdump در سولاریس» . Blogs.Oracle.com . اوراکل . بازیابی شده در 9 ژانویه 2017 .
  25. «نشانگرها و رابط‌های رابط» . Windows Dev Center - فناوری های برنامه دسکتاپ . مایکروسافت . بازبینی شده در 15 دسامبر 2015 . شما به یک رابط در زمان اجرا با یک شناسه رابط منحصر به فرد جهانی ( IID ) ارجاع می دهید . این IID که یک نمونه خاص از یک شناسه منحصربه‌فرد جهانی ( GUID ) است که توسط COM پشتیبانی می‌شود، به مشتری اجازه می‌دهد تا از یک شی دقیقاً بپرسد که آیا معنایی رابط را پشتیبانی می‌کند، بدون سربار غیر ضروری و بدون سردرگمی که ممکن است در یک سیستم ایجاد شود. از داشتن چندین نسخه از یک رابط با نام یکسان.
  26. ^ "ثبت کتابخانه نوع" . شبکه توسعه دهنده مایکروسافت . مایکروسافت . بازبینی شده در 15 دسامبر 2015 .
  27. « دسته‌بندی بر اساس قابلیت‌های مؤلفه» . Windows Dev Center - فناوری های برنامه دسکتاپ . مایکروسافت . بازبینی شده در 15 دسامبر 2015 . فهرستی از CATID ها و نام های قابل خواندن برای انسان در یک مکان شناخته شده در رجیستری ذخیره می شود.
  28. «NEWSEQUENTIALID (Transact-SQL)» . شبکه توسعه دهنده مایکروسافت . مایکروسافت . 8 آگوست 2015 . بازبینی شده در 14 ژانویه 2017 .
  29. «Oracle Database SQL Reference» . اوراکل .
  30. «بخش 8.12 نوع UUID» . اسناد PostgreSQL 9.4.10 . گروه توسعه جهانی PostgreSQL.
  31. ^ "uuid-ossp" . PostgreSQL: مستندات: 9.6 . گروه توسعه جهانی PostgreSQL.
  32. ^ "pgcrypto" . PostgreSQL: مستندات: 9.6 . گروه توسعه جهانی PostgreSQL.
  33. «بخش 13.20 توابع متفرقه» . راهنمای مرجع MySQL 5.7 . شرکت اوراکل .
  34. نیلسون، جیمی (8 مارس 2002). InformIT . InformIT . بازبینی شده در 20 ژوئن 2012 .
  35. «ذخیره مقادیر UUID در MySQL» . پرکونا. 19 دسامبر 2014. بایگانی شده از نسخه اصلی در 29 نوامبر 2020 . بازبینی شده در 10 فوریه 2021 .
  36. "Helpers - Laravel - The PHP Framework for Web Artisans" . Laravel.com .
  37. کابررا، ایتالو بائزا (31 ژانویه 2020). لاراول: اسرارآمیز "UUID سفارش داده شده " " . متوسط .
  38. «شناسه قابل مرتب‌سازی واژگانی منحصر به فرد جهانی» . GitHub . ULID. 10 مه 2021.
  39. «draft-peabody-dispatch-new-uuid-format-01» . tools.ietf.org .

پیوندهای خارجی

استانداردها

ژنراتور ITU-T UUID

مقالات فنی

متفرقه

پیاده سازی به زبان های مختلف