Аюулгүй түлхэх мэдэгдлүүд: онолоос практик хүртэл

Хөөе Хабр!

Өнөөдөр би хамтран ажиллагсадтайгаа хэдэн сарын турш юу хийж байгаа талаар ярих болно: гар утасны шуурхай мессенжерүүдэд зориулсан push мэдэгдлүүд. Би аль хэдийн хэлсэнчлэн манай програмд ​​​​хамгаалалтад гол анхаарлаа хандуулдаг. Тиймээс бид түлхэх мэдэгдлүүд нь "сул тал" байгаа эсэхийг олж мэдсэн бөгөөд хэрэв байгаа бол энэ ашигтай сонголтыг манай үйлчилгээнд нэмэхийн тулд тэдгээрийг хэрхэн тэгшитгэх талаар олж мэдсэн.

Би манай орчуулгыг нийтэлж байна Medium-аас нийтлэлүүд Өөрийнхөө хийсэн жижиг нэмэлтүүдээр. Үүнд “мөрдөн байцаалтын” үр дүн, асуудал хэрхэн шийдэгдсэн тухай түүхийг багтаасан болно.

Бид материалыг шалгадаг

Сонгодог загварт түлхэх мэдэгдлүүд нь мессенжерүүдийг MITM (Man-in-the-middle) халдлагад өртөмтгий болгодог. Жишээлбэл, Google, Microsoft болон iMessage-ийн хуучин хувилбарын хувьд програм нь Apple-ийн серверүүд рүү шифрлэлтийн түлхүүрүүдийг илгээдэг - сервер дээр хэрэглэгчдийг баталгаажуулж, мессежийн толгой хэсгийг (эсвэл түүний агуулгыг) тайлдаг.

Аюулгүй түлхэх мэдэгдлүүд: онолоос практик хүртэл

Үүний үр дүнд push мэдэгдлийн серверт нэвтрэх замаар захидал харилцааг унших боломжтой болно. Энэ нь захидал харилцааны аливаа шифрлэлт нь ашиггүй гэсэн үг юм: түлхэх мэдэгдэл нь гуравдагч этгээдэд унших боломжийг үлдээх болно. Өгүүллийн зохиогчид энэ боломжийг илүү нарийвчлан авч үзсэн. "Зөв шифрлэх" Xaker.ru дээр, мессежийг шифрлэх аргуудад зориулагдсан.

Хэрэв та Apple болон Google-ийн серверүүд хэрэглэгчийн шифрлэлтийн түлхүүр алдагдахаас 100% хамгаалагдсан гэж бодож байгаа бол тэдний ажилтнууд тэдгээрт хандах боломжтой гэдгийг анхаарч үзээрэй. Мөн ажилчид бол хүмүүс.
Түлхэх мэдэгдлийн бүх эмзэг байдлыг үл харгалзан Signal, Telegram зэрэг олон "аюулгүй" шуурхай мессенжерүүд үүнийг ашигладаг. Үгүй бол хэрэглэгчид програм руу байнга нэвтэрч шинэ мессежийг "гараар" хянах шаардлагатай болно. Энэ нь маш тохиромжгүй бөгөөд өрсөлдөгч мессенжерүүд давуу талтай болно.

Параной ба эрүүл ухаан


Төсөлдөө бид хэдэн сарын өмнө энэ асуудлыг нягт нямбай авч үзсэн. Бид өрсөлдөх чадвартай байхын тулд түлхэх мэдэгдлийн сонголтыг нэмэх шаардлагатай болсон. Гэхдээ үүний зэрэгцээ аюулгүй байдлын цоорхойг бүү нээ, учир нь аливаа мэдээлэл алдагдвал төсөлд итгэх итгэлийг алдагдуулна.

Гэсэн хэдий ч бид аль хэдийн чухал давуу талтай болсон: манай мессенжер нь төвлөрсөн бус (өгөгдөл блокчэйнд хадгалагддаг), ажилчид данс руу нэвтрэх эрхгүй. Зөвхөн хэрэглэгчид шифрлэлтийн түлхүүрүүдтэй байдаг бөгөөд MITM халдлагаас хамгаалахын тулд харилцан ярилцагчийн нийтийн түлхүүрүүд блокчейн дээр байдаг.

Түлхэх мэдэгдлийн эхний хувилбарт бид үүнийг аль болох аюулгүй болгож, мессежийн текстийг огт дамжуулахгүй байхаар шийдсэн. Түлхэх үйлчилгээ нь зангилаанаас мессежийн текстийг хүлээн аваагүй бөгөөд зөвхөн түүнийг хүлээн авсан тухай дохио юм. Тиймээс хэрэглэгч "Шинэ мессеж ирлээ" гэсэн мэдэгдлийг харсан. Зөвхөн мессенжерээс л унших боломжтой байсан.

Аюулгүй түлхэх мэдэгдлүүд: онолоос практик хүртэл
Энэ хэрхэн ажилласан: видео.

Үүний дараа бид Apple-ийн мэдэгдлийн хамгийн сүүлийн хувилбар нь аюулгүй байдлын шинэ боломжуудтай болохыг олж мэдсэн. Тэд гаргасан UNNotificationServiceExtension нь хөгжүүлэгчдэд APNS-ээр дамжуулан бүрэн шифрлэгдсэн мэдэгдлийн өгөгдлийг илгээх боломжийг олгодог. Эцсийн хэрэглэгчийн төхөөрөмж дээрх програм нь дараа нь шифрийг тайлах (эсвэл нэмэлт өгөгдлийг татаж авах) болон мэдэгдэл харуулна. Бид үүнийг түлхэх мэдэгдлийн хоёр дахь хувилбарын үндэс болгон авсан.

Бид одоо iOS-д зориулсан push мэдэгдлийн хоёр дахь хувилбарыг боловсруулсан бөгөөд энэ нь танд аюулгүй байдлын эрсдэлгүйгээр мессежийн текстийг харуулах боломжийг олгодог. Шинэ үзэл баримтлалд логик нь дараах байдалтай байна.

  • Түлхэх үйлчилгээ нь гүйлгээний дугаар бүхий түлхэх мэдэгдлийг илгээдэг (шифрлэгдсэн мессеж нь маш том байж болно, мэдэгдлийн хэмжээ маш хязгаарлагдмал)
  • Төхөөрөмж мэдэгдэл хүлээн авмагц манай NotificationServiceExtension буюу id-ээр зангилаанаас гүйлгээ хийх хүсэлт гаргаж, хадгалсан нууц үг ашиглан шифрийг тайлж, систем рүү шинэ мэдэгдэл илгээдэг бичил программыг ажиллуулдаг. Нууц үг нь аюулгүй хадгалах санд хадгалагдана.
  • Систем нь шифрлэгдсэн мессеж эсвэл орчуулга бүхий мэдэгдлийг харуулдаг.
  • Түлхүүрүүд нь энгийн мессеж шиг хаашаа ч явдаггүй. Түлхэх үйлчилгээ нь мессежийн кодыг тайлах арга байхгүй.

Аюулгүй түлхэх мэдэгдлүүд: онолоос практик хүртэл

Бид энэ хувилбарыг ажиллаж байгаа гэж хүлээн зөвшөөрч, iOS програмын хамгийн сүүлийн үеийн шинэчлэлт дээр хэрэгжүүлсэн.
Техникийн талыг сонирхож буй хүмүүс эх кодыг үзэх боломжтой: github.com/Adamant-im/adamant-notificationService.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх