برنامه وب – چگونه یک نشانه JWT میتواند اسرار چندگانه داشته باشد؟

من از ابزار jwtcrack استفاده میکنم تا یک نشانه صادر شده JWT را امتحان کنم. من فکر می کنم فقط خروجی زیر باید توضیح دهد که چه چیزی به خوبی پیش می رود:

[0] ٪ ./jwtcrack [token]
راز "P" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "یک" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "ال" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "ال" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "یک" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "یک" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "R" است

joseph @ MBA <master ●>: ~ / c-jwt-cracker
[0]٪ ./jwtcrack [token]
راز "ال" است

آیا این نوعی ویژگی است؟ من احساس می کنم که jwtcrack فقط مشکل است، اما چگونه می تواند چندین نتیجه مثبت برای اسرار مختلف داشته باشد؟ این که حتی از طریق رمزنگاری امکان پذیر است؟

مدیریت کلید – اقدامات کلیدی چندگانه PGP برای امضای کد، GitHub، و ایمیل

من مجموعه ای از اهداف برای گواهینامه PGP را استفاده می کنم و آنچه که من فکر می کنم یک برنامه منطقی به عنوان یک راه حل است، توسعه داده ام. آنچه که من تعجب می کنم این است:

آیا من چیز مهمی را که نیاز دارد یا به شدت پیشنهاد تغییر در راه حل من را نادیده می گیرد؟

این سوال در مورد نگهداری مجموعه پیشنهاد شده کلید یا "بهترین روش ها" نیست "برای نسل، پشتیبان و غیره. همه چیزهایی که من در اینجا اهمیت می دهم این است که چه تله هایی را برای خود تعیین کرده اید یا سوراخ های امنیتی که ایجاد کرده ام، یعنی برنامه خود را ارزیابی کنید.

Intro

بسیاری از منابع در مورد استفاده از کلید های PGP و کلید های میانبر، که اکثر آنها اکنون نمی توانم به آن اشاره کنم، به عنوان یک مسئله تحقیق درازمدت بوده است و انتظار می رود برای پیدا کردن پاسخ های مشخص، مسیر من را ذخیره نکنم. در مورد استفاده از کلید های چندگانه یک کلید اولیه برای مقاصد مختلف در مقایسه با استفاده از چندین کلید اولیه چند هدفه، همه چیز در مورد هیئت مدیره وجود دارد. دو، مخالف، دیدگاه هایی که به یاد می آورم، از الکس کابال و آلن الیاسن هستند. (بحث من نه، هنوز ، خودم را ارزیابی کردم.)

به عنوان یک دوم، مسئله مرتبط، به نظر می رسد بحث (با وجود همه همه موارد نه تاریخی) در مورد استفاده از کلید های منحنی بیضوی و "مفید بودن" آنها به علت کمبود پیاده سازی در وحشی است که می تواند آنها را اداره کند.

تهدید

هیچ تهدید غیر معمولی وجود ندارد. بازیگران دولتی / به خوبی تأمین مالی این کسب و کار یا شخص من را هدف قرار داده اند. هیچ رقابتی کسب و کار فوق العاده ای وجود ندارد که به احتمال زیاد به کسب و کار یا پایگاه کد آن هدایت شود. تهدیدات عادی هکرهای تصادفی، اسکریپتها و غیره همواره در حال حاضر هستند. هدف اصلی حمایت ها عبارتند از: ایجاد پرونده و یکپارچگی داده ها و تأیید. یک هدف جانبی این است که، به عنوان مثال، پذیرش PGP، و تشویق بیشتر افراد و کسب و کار، برای شروع استفاده از PGP به عنوان قاعده، به جای استثنا، ترویج شود. به نظر میرسد استفاده از درک شده به عنوان یک مشکل ساده کمک می کند، من بیشتر فکر می کنم که هدف و حفظ تعداد کلید های قابل مشاهده به حداقل در گواهینامه های PGP، به نظر می رسد "ادراک ساده" را افزایش دهند.

اهداف

من می خواهم برای ایجاد یک سیستم یا مجموعه ای از گواهینامه های PGP برای پشتیبانی از اهداف زیر:

  • کلید PGP برای امضای GITHUB به نام کسب و کار من (پروتکل کد)
  • کلید PGP برای دسترسی SSH به کسب و کار حساب کاربری GitHub (امنیت و راحتی)
  • کلید PGP برای کسب و کار برای امضای انتشار و توزیع نرم افزار، روشن یا خاموش GitHub (یکپارچگی کد)
  • کلید PGP برای کسب و کار به عنوان یک هویت دیجیتال – ایمیل و غیره – برای رمزگذاری و امضاي عمومي
  • جداسازی نگرانی ها در مورد ایجاد کد، توزیع کد و "کسب و کار به عنوان یک موجودیت" ایجاد کنید، به طوری که کلید ها می تواند مورد استفاده قرار گیرد:
    • ثبت نام مجوز به سایر مخازن
    • دسترسی به SSH به دیگر حساب ها، GitHub یا غیره
    • توزیع های ثبت نام نه 100٪ منابع داخلی
    • نشانه های دیجیتالی نشانه های مربوط به کد را ندارند
    • ایجاد یک دیجیتال هویت برای کسب و کار به عنوان یک نهاد است که به کد، GitHub یا نرم افزار آن گره خورده است
  • توانایی «بازنشسته شدن» یا جایگزینی هر یک از کلیدهای مورد استفاده در بالا بدون تأثیر بر دیگران
  • یک مجموعه مشابه از کلید های PGP که هویت من است به جای کسب و کار کاربرد دارد

علاوه بر این ، من ترجیح می دهم که منحنی بیضوی (Curve25519 / Ed25519) را به طور منحصرا به همان اندازه ممکن نزدیک کنم. البته ممکن است که منادی باشد که من باید از RSA استفاده کنم، و یک روش به ظرافت "بازگشت" به RSA به نظر می رسد قابل توصیه است. با این حال امیدوارم که تمام فعالیتهایی که من از کلید PGP استفاده می کنم قادر به پردازش منحنی های بیضی نباشید و قابلیت RSA هرگز مورد نیاز نیست.

برنامه

برای رسیدن به این اهداف، من یک جفت برنامه های موازی.

مجوزهای گواهینامه

برای برنامه هویت، در ابتدا، من فکر می کنم چندین گواهی PGP مجزا قابل اجرا است و با تقسیماتی که در بالا ذکر شد، مطابقت دارد: 19659011] یک گواهی برای کسب و کار، به عنوان یک نهاد، با توانایی صدور گواهینامه، امضا، تأیید هویت و رمزگذاری.

  • تمام UID ها فقط برای کسب و کار هستند و هیچیک از آنها به من و دیگر کارکنان متصل نیست
  • هیچ یک از کلید های زیر برای امضای نرمافزار، git commitments، توزیع یا غیره استفاده نمی شود
  • هیچ یک از کلید های زیر استفاده نمی شود برای احراز هویت در GitHub یا سایر مخازن کد
  • یک گواهی که به طور انحصاری برای امضای نرمافزار منتشر شده توسط این شرکت استفاده شده است
    • امضای به این معنی است که کسب و کار نقطه توزیع برای آن بسته است
    • امضای همچنین اجازه می دهد تا تایید یکپارچگی آن بسته
    • منبع اصلی نرم افزار ممکن است بخشی از " امضای
    • کدام کانال برای توزیع استفاده نمی شود مهم نیست
    • کد منبع یا دوبعدی لکه نیز مهم نیست
    • گواهی دارای کلید های زیر نیست با استفاده از auth یا رمزگذاری موجود
    • این گواهینامه توسط گواهی هویت کسب و کار بالا
    • تایید شده است

  • یک گواهی سوم برای GitHub استفاده شده است
    • گواهینامه دارای کلید های رمزگذاری استفاده نشده است
    • استفاده از مجوز و علامت در دو کلید جداگانه است
    • کلید عمومی auth تنها برای دسترسی به حساب GitHub از کسب و کار
    • هر دسترسی آینده به مخازن دیگر از یک کلید جدید جدید استفاده کنید
    • کلید زیر را برای امضای GIT اعمال می کند و تنها ادغام می کند، نه در GitHub منتشر می شود
    • این گواهی توسط هویت کسب و کار و گواهینامه های امضای کد در بالا تایید شده است
    • A کارکنان جدیدی که مرتکب اعمال می شوند، نیاز به یک گواهینامه دارند، اما از همه ی راه ها یکسان است، اما UID ها، به این یکی است.
  • یک گواهی جداگانه می تواند توسط یک کارمند که بتواند از طرف کسب و کار عمل کند
    • بطور کاربردی این همانند اولین گواهینامه است که UID ها آنها را بعنوان بخشی از کسب و کار شناسایی می کنند، اما نه خود کسب و کار (به صورت نام یا عنوان – مانند "فروش" یا "cfo"
    • گواهی توسط گواهی هویت کسب و کار تأیید می شود.
  • اگر چه ممکن است کمی شدید باشد، من فکر می کنم تقسیم مشابهی از سه گواهینامه بالا، به نام من، برای استفاده شخصی عملی و سودمند است. تا زمانی که کارکنان دیگر در فرایند نرم افزاری دخیل نبوده باشند، برای گواهینامه های شخصی من منطقی است که گواهینامه کسب و کار برای همین هدف گواهی شود. در حال حاضر، اگر کسب و کار یک توزیع را امضا یا منتشر کند، "من" امضای امضا را تحت اختیار کسب و کار انجام می دهم. داشتن گواهینامه امضای شخصیت شخصی شما را به عنوان گواهی کسب و کار کمک می کند تا آن اتصال را ایجاد کنید. باید شخص دیگری به حزب مسئول تبدیل شود، گواهی باید به هر حال جایگزین شود (کلید خصوصی که دو نفر به اشتراک گذاشته است، دیگر "خصوصی" نیستند). در این مورد، آنها می توانند از یک گواهی شخصی برای تایید کلید امضای جدید کسب و کار استفاده کنند.

    این آرایش گواهی ها به نظر می رسد ارتباط بین هدف کلیدی و هویت کسب و کار را مشخص کند.

    الزامات گواهینامه

    نیمه دوم طرح من توسعه یافته است، که منطبق با یک "وفاداری" و " در صورتی که، و در صورت نیاز، این دستورالعمل ها برای هر گواهی PGP ساخته شده است:

    • کلید اصلی کلید ECC خواهد بود (Ed25519)
    • کلید اصلی [C] فقط فعال خواهد شد، هیچ [19659058]، [A]، یا [E] استفاده
    • اولین کلید (به طور خودکار ساخته شده) خواهد شد:
      • استفاده از یک نوع کلیدی به عنوان ECC اصلی (Curve25519 / Ed25519)
      • تنها هدف: [S]، [A] یا [E]، هرگز [SA] حتی اگر مجاز باشد
      • هدف انتخاب شده بستگی دارد که مورد استفاده کلید است
        • [A] برای گواهینامه هایی که عمدتا برای SSH یا استفاده مشابه از
        • [S] برای گواهینامه هایی هستند که عمدتا برای ارائه امضاهای دیجیتال
        • [E] برای گواهی هایی هستند که عمدتا به منظور استفاده عمومی برای افراد، (به احتمال زیاد برای ایمیل و ارتباطات دیگر مورد استفاده قرار می گیرد و من ترجیح می دهم که رمزگذاری را در زمانی که می توانم تشویق کنم)
        • [S] برای گواهینامه های عمومی برای بنگاه های تجاری که در آن نیاز به «امضای» چیزها و ارتباطات، برای رمزگذاری ارتباطات.
      • به محض اینکه ساخته شد، به پایان رسید
    • کلید های اضافی (همیشه حداقل یک مجموعه وجود دارد) عبارتند از:
      • تنها هدف: [S]، [A] یا [E]، هرگز [SA] حتی اگر مجاز باشد
      • همان نوع کلیدی به عنوان کلید اصلی، ECC (Curve25519 / Ed25519)
      • مجموعه با پایان دوره در محدوده 6-12 ماه (بسته به استفاده و قرار گرفتن در معرض، و غیره)
      • یک کلید اضافی ساخته شده با استفاده از همان، و کلید مقابل نوع RSA-4096
      • زیر کلید زیر است به محض اینکه ساخته شد، به عنوان منقضی شده

    به عنوان یک لایه اضافی از قابلیت «عقبنشینی»، هر یک از گواهیهایی که در بالا ذکر شد، توسط یک گواهی اضافی، با مجموعه یکسان از کلید های زیر، استفاده و انقضا، تکمیل می شود. تفاوت ها عبارتند از: 1) جایی که اول دارای کلید های ECC است؛ دومین دارای کلید های RSA است؛ 2) زیر کلید های ECC به جای کلید های RSA به پایان رسیده است و 3) خود گواهی نیز به پایان رسیده است (ساخت کلید های RSA غیرقابل استفاده غیر قابل استفاده است) برای کمک به ایجاد «بازگشت به عقب» برازنده، هر دو کلیدهای دیگر را تایید می کنند، و هر گواهی هایی که من برای تایید نسخه ECC نیز نسخه نسخه RSA را تایید می کنم. همچنین در هر زمان از گواهینامه ECC برای گواهی متصل شده مانند گواهینامه امضای کد بالا استفاده می کنم، همچنین از گواهی دوقلوی RSA برای تأیید گواهی همان استفاده می کنم. (بنابراین، هر "گواهینامه" شامل چهار امضا می شود: هر یک از دو کلید "گواهی" امضاء هر دو کلید "تایید شده"، بدون در نظر گرفتن اینکه در واقع UID (ها) هستند که امضا شده اند.)

    بحث [19659005] با داشتن همه زیر مجموعه ای از هر استفاده خاص، منقضی شده است، برنامه های مشتری را برای انتخاب یک کلید قابل استفاده انتخاب می کند، یا این که اخیرا برای آن استفاده می شود. اگر شرایطی را که در آن باید از RSA استفاده کنم، می توانم کلیدی مربوطه را بدون از دست دادن امضای قبلا ساخته شده و غیره استخراج کنم. در صورتی که من مجبور هستم برای تغییر کلید اصلی RSA (بعید، در my فکر می کنم)، من نیز یک موجود است که توسط کلید ECC که در حال حاضر در حال استفاده است استفاده می شود که آن را دوقلو است.

    اگر به نحوی، کلید مخفی مورد استفاده در زیر کلید به خطر بیافتد، من هنوز ابتدا کلید زیر را بعنوان آخرین گزینه ایجاد کرد. من می توانم کلیدی (ها) آسیب دیده را حذف کنم و کلیدی اصلی را بازیابی کرده و عملیات را ادامه دهم. این زیر کلید به صورت کلید وارد نشده و یا حتی به سرورهای کلیه صادر می شود و بصورت آفلاین ذخیره می شود با همان امنیت به عنوان کلید اصلی مخفی خود. بهتر است، من معتقدم، کلید لغو کلید خطرناکی است و یک زیر کلید جدید با استفاده و نوع مشابه تحت کلید اصلی اصلی صادر می شود.

    از یک موضع موضع استفاده روزانه، Keyring فعال فقط دارای کلید های زیر است که ساخته شده اند برای هدف گواهی (هر دو کلید ECC و RSA) از کلید اصلی ECC. خود کلید اصلی، کلید اول ساخته شده به صورت خودکار ایجاد شده و کلیدهای master RSA دوقلو کامل باقی می ماند بر روی رسانه پشتیبان گیری.

    با تظاهرات و دقیقا مشخص کردن آنچه که در طرح به نظر می رسد در عمل، من یک تولید مجموعه گواهی های PGP. سپس GnuPG را برای لیست کلیدها و امضا از نقاط دید مختلف استفاده کردم. اول، سیستم تولید کلیدی است که همه چیز را به عنوان "به عنوان تولید شده" شناخته است. دوم این است که چگونه آنها را به کلاه ایمنی من، ECC certs و مقادیر محدودی که "in-keyring" نامیده می شوند وارد می کنند. لیستی از شش (سه دیدار با و بدون امضا) لیست شده اند که در لیست قرار داده شده است، به طوری که می توان آنها را در صورت لزوم "ببینیم منظور من چیست" (من می خواستم آنها را اینجا قرار دهم اما به نظر می رسد طول می کشد تا در سوال قرار گیرد.)

    سوال

    بنابراین، این دیوار متن پشتیبانی یک سوال:

    آیا من نادیده گرفته چیزی مهم است که نیاز دارد، و یا به شدت پیشنهاد می دهد، تغییر در راه حل من، و آیا باید آن را به یک راه بهتر انجام شد؟

    openssl – CSR چندگانه از همان کلید خصوصی

    در نظر بگیرید که من یک کلید خصوصی جدید نامشخص با استفاده از openssl ایجاد کنم:

     openssl genrsa-out personal.key 2048
    

    من پس از آن چند درخواست CSR (به نام csr1.csr و csr2.csr ):

     openssl req-new -sha256 -key personal.key -out csr1 .csr
    openssl req -new -sha256 -key personal.key -out csr2.csr
    

    (هر دو CSR با همان مجموعه ای از فیلدها تولید می شوند.

    فایل های .csr به احزاب مختلف داده می شود و csr1.csr به خطر افتاده است توسط شخص ثالث

    چگونه امن و اعتماد هستند csr2.csr و personal.key اکنون (در شرایط استفاده باقی مانده و حفظ آنها برای استفاده در آینده)

    باید csr2.csr و / یا personal.key اگر csr1.csr به خطر افتاده است؟ اگر چنین است، چرا این است؟

    شبکه – چندگانه با Docker

    من سعی می کنم ترافیک بین دو ظرف Docker ("وب سرور" و "chrome_client") را با استفاده از ظرف "middle" در حالت MITM ترسیم کنم. بنابراین ما این توپولوژی اساسی داریم:

    [chrome_client] -> [intermediate] -> [webserver]

    شرح مختصری از ظروف است:

    • [chrome_client] : ظرف مورد استفاده برای بازکردن کروم به صورت گرافیکی

    • [intermediate] : ظرف کالی با استفاده از ettercap برای راه اندازی آن در حالت mitm و گرفتن هر ترافیکی از طریق عبور

    • [webserver] : یک سرور ساده lighttpd یک ویرایشگر ساده Markdown را نشان می دهد

    راه اندازی ظروف اولین تنظیم کننده است یک شبکه جدا شده و ظروف داخل آن را به کار ببرید (همانطور که در اینجا توضیح داده شده است). مثل این:

     # شبکه جدا شده
    شبکه docker ایجاد --subnet = 172.19.0.0 / 24 - gateway 172.19.0.254 mynet123
    

    در حال حاضر، ظرف "middle":

     docker run --rm -it --net mynet123 --ip = 172.19.0.7 - privileged kali / wireless: ettercap bash
    

    مرورگر کروم:

     docker run --rm -d -u = 1000: 1000 --net mynet123 --ip = 172.19.0.4 -v /tmp/.X11-unix:/tmp/.X11- unix -e DISPLAY = unix $ DISPLAY -v $ HOME / EmptyDir: / data -v / dev / shm: / dev / shm --cap-add = SYS_ADMIN image / chrome: latest
    

    و سرور وب (یک سرور lighttpd، نمایشگر ویرایشگر Markdown):

     docker run --rm -d --net mynet123 --ip = 172.19.0.5 image / markdown: latest
    

    در ظرف "middle"، من اجرا می کنم:

     # اول، برخی از تنظیمات برای حمل و نقل
    sysctl -w net.ipv4.ip_forward = 1
    sysctl -w net.ipv6.conf.all.forwarding = 1
    sysctl -w net.ipv4.conf.all.send_redirects = 0
    iptables-FORWARD -i eth0 @ if16 -o eth0 @ if16 -j ACCEPT
    
    # راه اندازی mitm برای گرفتن چیزی بین 2 ظرف دیگر:
    ettercap -T -M arp: remote -i eth0 / 172.19.0.5// /172.19.0.4//
    

    اکنون، URL مرورگر Chrome را وارد کنید http://172.19.0.5 و هیچ چیز ظاهر نمی شود. همه خالی است، در حالی که در خروجی ettercap من دریافت می کنم:

     جمعه ژوئن 19 16:19:22 2018 [463117]
    TCP 172.19.0.4:51840 -> 172.19.0.5:80 | S (0)
    
    
    جمعه ژوئن 19 16:19:22 2018 [463119]
    TCP 172.19.0.4:51842 -> 172.19.0.5:80 | S (0)
    
     ... و غیره ....
    

    من نمی فهمم که چه چیزی به من می گوید. توجه داشته باشید که من نه با استفاده از https، بنابراین نباید هیچ مشکلی با گواهینامه داشته باشم. راست؟

    PD: در عین حال، من در تلاش برای استفاده از mitmproxy در "پروکسی میانجی، اما من فکر کردم ممکن است راه حل اشتباه را با حذف هر گونه مشکل با گواهینامه SSL.

    dns – مدیریت زیر دامنه چندگانه و اضافه کردن زیر دامنه، در همان دامنه برای SAAS، از GoDaddy؟

    من برنامه دارم و کار بر روی پلت فرم SAAS است.
    تنها موضوع با نگه داشتن چندین زیر دامنه.
    دامنه ثبت نام از Godaddy

    اگر هر کسی دسترسی به زیر دامنه ثبت نام، آن را به طور خودکار برای ایجاد زیر دامنه هدایت می کند.

    من می خواهم آن را از هر کسی جلوگیری کنم، تنها کاربر ثبت نام میتواند به آن دسترسی پیدا کند. کاربر غیر مجاز نمیتواند به عنوان یک کاربر دسترسی پیدا کند و ثبت نام کند و زیر دامنه را ایجاد کند.

    مثال:

      Sub Domain Domain (دامنه ثبت نشده)
     http://xyz.com http://abc.xyz.com
                              (اگر کسی به زیر دامنه دسترسی پیدا کند،
                            آن را ایجاد زیر دامنه، من می خواهم از آن جلوگیری می کند.)
    

    برای پاسخ ارزشمند خود به شما سلام می کند