İçindekiler:

Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı: 3 Adım
Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı: 3 Adım

Video: Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı: 3 Adım

Video: Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı: 3 Adım
Video: Emmet - Actions - Increment Decrement Number 2024, Kasım
Anonim
Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı
Arduino Üzerinde RC522 ile Mifare Ultralight C Kullanımı

Kart sahiplerini tanımlamak veya bir şey yapmak için yetki vermek (kapı açmak vb.) için RFID teknolojisini kullanmak oldukça yaygın bir yaklaşımdır. Kendin Yap uygulaması durumunda, RC522 modülü oldukça ucuz olduğundan ve bu modül için çok sayıda kod bulunduğundan yaygın olarak kullanılmaktadır.

Çoğu durumda, kartın UID'si, kart sahibini "tanımlamak" için kullanılır ve Mifare Classic kartları, ucuz oldukları ve genellikle bir RC522 modülü satın alırken dahil edildiği için kullanılır.

Ancak bildiğiniz gibi, Mifare Classic sistemi birkaç yıldır saldırıya uğradı ve artık güvenli olarak kabul edilmiyor. Classic kartların kullandığı Crypto1 şifreleme sisteminin üstesinden gelinebilir ve verilerin bir UID'nin yeniden programlanabileceği (sihirli kartlar) yeniden yazılabilir kartlardır.

Bu nedenle, güvenlikle ilgili herhangi bir uygulama için Mifare Classic kartlarının kullanılması önerilmez! Aynısı (çoğu) NTAG ve Mifare Ultralight sistemleri için de geçerlidir

Bu nedenle seçim, ya profesyonel bir sistem kullanmak ya da daha güvenli bir RFID sistemi kullanmaya çalışmaktır. Mevcut sistemler Mifare Ultralight C, Mifare DESFire ve Mifare Plus'tır. Bu daha güvenli sistemleri kullanan birçok profesyonel sistem olduğundan, DIY topluluğu için neredeyse hiç çözüm yoktur (daha pahalı PN523 devre kartına dayalı Teensy tabanlı bir DESFire çözümü vardır). Ayrıca DESFire kartları oldukça pahalıdır. Dolayısıyla zorluk, daha iyi ve daha ucuz bir çözüm bulmaktı.

Sunulan çözüm, ucuz Çin RC522 DIY modülünü kullanarak ucuz Mifare Ultralight “C” kartlarına tam erişim sağlar. Bu koda dayanarak, güvenli Mifare Ultralight C, DIY uygulamalarında kullanılabilir.

Adım 1: Ön koşullar

ön koşullar
ön koşullar

RC522 iyi tasarlanmış olmasına rağmen, çoğu durumda bazı bileşenler yetersiz boyutlandırılmış olduğundan zayıf inşa edilmiştir. Bu, modülün düşük hassasiyete sahip olduğu ve tüm kart türlerinin tanımlanmayacağı konusunda kötü bir üne yol açar. Özellikle Mifare Ultralight C ne tespit edilecek ne de kartların okunması mümkün olacak.

Asıl sorun, L1 ve L2 indüktörlerinin spesifikasyonudur. https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html adresinde açıklandığı gibi. Sadece bu indüktörleri uygun olanlarla değiştirerek, örn. FERROCORE CW1008-2200 birdenbire RC522 gerçek potansiyelinin ne olduğunu gösteriyor.

Bu yüzden verilen kodu denemeden önce indüktörleri DEĞİŞTİRMENİZ GEREKİR. Sadece önceden kurulmuş indüktörlerle çalışmayacak!

Tüm bunların arka planı, Ultralight C kartların oldukça enerji aç olmalarıdır. Bu enerji RC522 RF alanı tarafından sağlanır. İndüktörlerin düşük amperi nedeniyle, enerji alanı Ultralight C'ye güç sağlamak için yeterince güçlü değil. Mifare Classic gibi diğer kartlar sadece daha az güce ihtiyaç duyuyor ve bu nedenle oldukça kararlı çalışıyor.

Adım 2: Nasıl Çalışır?

O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?
O nasıl çalışır?

Peki RC522 modülünü değiştirdikten sonra Mifare Ulralight C'yi uygulamanız için nasıl kullanabilirsiniz?

İşin püf noktası, Mifare Ultralight C'nin 3DES şifresine dayalı bir parola doğrulamasını desteklemesidir. Bu şifre kullanılarak kartın içeriği “salt okunur” veya yetkisiz bir kullanıcı tarafından tamamen görünmez hale getirilebilir.

Bu şifre korumasının kullanılabilmesi için karta şifrenin yazılması ve sayfaların korunması gerekmektedir. Tamamlandığında, uygulamanızdaki kartı yalnızca parola tabanlı bir kimlik doğrulaması isteyerek veya ek olarak korunan bir alandan hazır veriler isteyerek doğrulayabilirsiniz. Yalnızca bu başarılı olursa, kartta sağlanan UID'ye güvenebileceğinizi bilirsiniz.

Dikkat: Parola tabanlı kimlik doğrulama olmadan, Ultralight C'yi simüle eden "sihirli kartlar" olduğu için Mifare Ultralight C kartına hala güvenemezsiniz.

Teknolojiden bağımsız her kart (doğru frekansta ise), RF alanı tarafından çalıştırıldığında UID'leri ile yanıt verecek ve kendilerini tanımlamalarını isteyecektir. Ek olarak, mevcut kartın türü hakkında minimum bilgi sağlayan bir SAK değeri sağlarlar. Ne yazık ki tüm Mifare Ultralight ve NTAG, Mifare Ultralight C de dahil olmak üzere syme tipi (SAK=0x00) olarak tanımlanır. Bu nedenle, kartlar için yoklama yaparken, en azından 0x00 SAK değeri, okuyucuda bir Ultralight C olabileceğine dair bir ipucu verecektir..

Ultralight C olduğundan emin olmak için karta şifreli bir kimlik doğrulama isteği gönderilebilir. Bu bir Ultralight C kartı DEĞİLSE, bu istek anlaşılmayacak ve yanıt bir NAK (kabul edilmedi) olacaktır.

Bu bir Ulralight C kartıysa, 8 baytlık bir yanıt alırsınız. Bu 8 Bayt, 3DES şifresi kullanılarak kartta saklanan anahtar tarafından şifrelenen rastgele bir “B” (RndB) sayısıdır.

Bu şifreli RndB'nin şifresi, programdaki aynı anahtar kullanılarak çözülmelidir. Bu rastgele sayı daha sonra biraz değiştirilir (bir bayt döndürülür → bayt 1, bayt 8'e taşınır ve diğer tüm baytlar bir bayt aşağıya itilir, ardından RndB' olarak adlandırılır). Program daha sonra kendisi (RndA) 8 Byte rasgele bir sayı üretir ve bu RndA'yı değiştirilmiş RndB'ye ekler. Bu yine anahtar kullanılarak şifrelenir ve karta gönderilir.

Kart mesajın şifresini çözer ve RndB'nin kartta önceden oluşturulmuş RndB'ye uyup uymadığını kontrol eder. Eşleşirlerse, kart artık programın anahtarı bildiğini bilir.

Bu noktada, program hala kartın anahtarı bilip bilmediğini bilmiyor ve bu nedenle güvenilir olup olmadığını bilmiyor. Bunu başarmak için, kart şimdi şifresi çözülen RndA'yı bir bayt döndürür, ardından bu baytları anahtarı kullanarak şifreler ve geri gönderir.

Program daha sonra kartın cevabının şifresini çözecek ve orijinal RndA ile cevaplanan RndA'nın eşleşip eşleşmediğini kontrol edecektir. YALNIZCA SONRA her iki varlık (program ve kart) aynı anahtarın bilgisini paylaştıklarını bilirler.

Bu işlem yalnızca kimlik doğrulaması için kullanılır. Diğer tüm iletişimler her zaman “açık metin” şeklindedir.

UID'nin değiştirilebildiği “magic Ultralight C” kartları olmasına rağmen, anahtarın kendisi karttan alınamıyor ve 3DES şifresi oldukça güvenli. Anahtar 16 Baytlık bir anahtardır, bu nedenle anahtarı elde etmek için kaba kuvvet yaklaşımı biraz zaman alacaktır.

Belirtildiği gibi, kimlik doğrulamadan önceki ve kimlik doğrulamadan sonraki iletişim her zaman açık metindir (yani şifrelenmemiş). Karta yeni bir anahtar yazarken, doğru ekipman kullanılarak anahtarın içeriği okunabilir. Bu yüzden lütfen anahtarı yalnızca güvenli bir ortamda yazın ve anahtarı gizli tutun.

Ultralight C kartını kullanırken

Ultralight C kartında yerleşik olarak bulunan birden çok güvenlik özelliği bulunur:

  1. Bir Kez Programlama (OTP) hafızası. Bu alana bitler yazılabilir, bus silinemez.
  2. 16 bitlik tek yönlü sayaç. Bu sayaç yalnızca erişildiğinde artabilir.
  3. Bellekteki sayfaların "yazma" veya "okuma/yazma" koruması. Yalnızca anahtarla kimlik doğrulaması yapıldığında bu sayfalar okunabilir veya değiştirilebilir.
  4. Herhangi bir değişikliğe karşı koruma sağlamak için tek tek sayfaların dondurulması / engellenmesi.

Verilen kodda ne OTP, 16 bitlik sayıcı ne de engelleme bitinin kullanımı uygulanmaz, ancak https://www.nxp.com/docs/en/data- adresinde verilen bilgilere dayanarak kolayca uygulanabilir. sayfa/MF0ICU2.pd…

Mifare Ultralight C'yi kullanmak için anahtarla koruma gerekli olduğundan, ilgili tüm işlevler mevcuttur.

Tüm komutlar "yalnızca yeni hat" ve 115200 Baud ile Seri monitörde kullanılır

  • “auth 49454D4B41455242214E4143554F5946” verilen anahtarla (bu durumda standart Mifare Ultralight C anahtarı) kimlik doğrulama isteyecektir.
  • "Dump", kartın içeriğini görünür olduğu kadar boşaltacaktır. Sayfaların anahtarla korunması durumunda, bu sayfalar, anahtarla önceki bir kimlik doğrulama işlemine kadar görünmeyebilir. İlk iki sütunda sayfaların kilitli mi yoksa erişimin mi kısıtlı olduğu belirtilir.
  • “newKey 49454D4B41455242214E4143554F5946” karta yeni bir anahtar yazacaktır. Anahtar, 44 ila 47 arasındaki sayfalara yazılmıştır. Bu, yalnızca, bu sayfalar önceden bir kimlik doğrulama olmadan kilitlenmemiş veya korunmamışsa çalışır.
  • "wchar 10 merhaba dünya", 10. sayfadan itibaren "merhaba dünya" yazacaktır. Yine, bu sadece sayfaların işleri, önceden bir doğrulama olmadan ne kilitlenir ne de korunur. 39. sayfanın üstüne veya 4. sayfanın altına yazmaya çalışırken bu, bir uyarı isteyecektir. Bu sayfalar kullanıcı belleği olmadığından hata veya veriler yok sayılır.
  • “whex 045ACBF44688” Hex değerlerini doğrudan belleğe yazacaktır, önceki koşullar geçerlidir.
  • “koruma 30”, sayfa 30'dan itibaren tüm sayfaları korur. İzne bağlı olarak, bu sayfalar daha sonra yalnızca anahtarla önceden bir kimlik doğrulamasından sonra değiştirilebilir veya okunabilir. 47'den yüksek değerlerle "koru" kullanmak, 44-47. sayfalardaki ANAHTAR DAHİL (sadece değiştirilebilir ancak okunamaz) tüm sayfaları "korumasız" olarak ayarlayacaktır. Anahtarın değiştirilmesini önlemek için koruma en azından sayfa 44'ten başlamalıdır.
  • “setpbit 0”, koruma bitini ayarlar ve korunan sayfaların salt okunur mu (“setpbit 1”) veya önceden anahtarla kimlik doğrulaması yapılmadan okunup yazılmaz mı (“setpbit 0”) olduğuna karar verir.

Kart algılandıktan hemen sonra tüm komutlar kullanılamaz. Daha önce başka bir komuta "döküm" her zaman yardımcı olur.

3. Adım: Önemli

  1. Program, sayfa 43 ve 44'ü okuyarak Ultralight türleri arasında ayrım yapar. Sayfa 43 okunabilirse ve sayfa 44 değilse, büyük olasılıkla bir Ultralight C'dir. AMA, sayfa 43'ü okur/yazmayı korursanız, kart artık olarak tanınmaz. Ultralight C (hiçbir şey üzerinde herhangi bir etkisi yoktur) Ultralight'ın doğru tanımlanması, anahtarla kimlik doğrulama yoluyla yapılmalıdır (kararlılık nedeniyle bunu uygulamadım).
  2. “setpbit” ve “koru” komutları kullanılmadan önce “dump” komutu kullanılmalıdır, aksi takdirde sayfaların koruma durumu bilinmeyecektir.
  3. Kartınızın ilk sayfalarını “okuma/yazma” ile korursanız, ilk sayfa sürekli kart olup olmadığını görmek için okunduğu için bu programla çalışmayacaktır. İlk iki sayfa yine de salt okunur olduğundan (UID orada saklanır), onları korumanın bir anlamı yoktur.

Kararlılık sorunları

Bu kod, Arduino için "standart" RC522 kitaplığını ve https://github.com/Octoate/ArduinoDES adresinden bir 3DES kitaplığını kullanır. RC522 kütüphanesi oldukça yaygın olarak kullanılırken, 3DES kütüphanesi çok yaygın görünmüyor ve manuel olarak kurulmaları gerekiyor.

Kod bir Arduino Uno üzerinde test edilmiştir. Ama yazarken stabilite açısından çok garip sorunlarla karşılaştım. Her nasılsa ya programlama becerilerim o kadar iyi değil, kullanılan kütüphanelerden biri kararsız ya da kütüphaneleri karıştırmak iyi bir fikir değil.

Lütfen kodu kullanırken bunu aklınızda bulundurun!!!

Değiştirmek veya sadece parçalarını kullanmak, karttan okurken çökme, garip şeyler yazdırma veya zaman aşımı veya NAK alma gibi garip davranışlara neden olabilir. Bu, kodun herhangi bir yerinde olabilir (bana saatlerce hata ayıklamaya mal oldu). Bunun nedenini/nedenlerini bulursanız, lütfen bana bir ipucu verin.

Önerilen: