Pytanie Szyfr z trybem ECB nie powinien być używany


Próbuję użyć a Cipher z parą kluczy RSA wraz z "AndroidKeyStore". W całej dokumentacji Androida, którą mogę znaleźć, przykłady pokazują Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding") lub Cipher.getInstance("RSA/ECB/PKCS1Padding"). Obydwa te same ostrzeżenia dotyczą Androida Studio:

Szyfrowanie EBC nie powinno być używane

Szyfrowanie # getInstance nie powinno być wywoływane z EBC jako tryb szyfrowania lub bez ustawiania trybu szyfrowania, ponieważ domyślnym trybem na Androidzie jest EBC, który jest niezabezpieczony.

Oczywiście nie mogę tego pominąć ani ustawić trybu None, ponieważ domyślnie jest to EBC. Jeśli tryb ECB jest niepewny, z którego trybu powinienem korzystać?

Jeśli używam innego trybu (o którym wiem), otrzymuję NoSuchAlgorithmException: No provider found for RSA/{mode}/OAEPWithSHA-256AndMGF1Padding. Czy dopełnienie mogło być problemem?

Tak czy inaczej, zgodnie z System Android KeyStore dokumentacja, tryb ECB wydaje się być jedynym trybem szyfrowania, który obsługuje podczas używania RSA.


13
2018-03-15 16:00


pochodzenie




Odpowiedzi:


Wygląda na to, że błąd w Android Lint używany przez Android Studio do znajdowania problemów. Intencją tego ostrzeżenia jest ostrzeżenie o korzystaniu z trybu blokowego ECB z szyframi symetrycznymi, takimi jak AES. Jednak nie ma sensu ostrzeżenia o tym dla RSA, ponieważ RSA / ECB / ... Cipher akceptuje / przetwarza tylko jeden blok danych wejściowych.

Proponuję zgłosić błąd https://code.google.com/p/android/ przeciwko Androidowi Lint.


15
2018-03-15 20:22



Przesłane Numer 204099 - Bryan


Podoba mi się to wyjaśnienie (z Maarten Bodewes):

"RSA/ECB/PKCS1Padding" w rzeczywistości nie implementuje szyfrowania w trybie EBC. Powinien był zostać wywołany "RSA/None/PKCS1Padding" ponieważ może on być użyty tylko do zaszyfrowania pojedynczego bloku tekstu jawnego (lub tajnego klucza). To tylko nazwa błędu Sun / Oracle.

Gdyby twoja wersja Androida zawiera BouncyCastle, wtedy możesz użyć None zamiast ECB.


7
2017-08-29 09:42





Zmieniając "AES / ECB / PKCS5PADDING" na "AES / CBC / PKCS5PADDING", naprawiłem to ostrzeżenie o bezpieczeństwie, ostrzegając mnie.


-1



Używam RSA do generowania kluczy, dostarczając klucz RSA do a Cipher z transformacją AES spowoduje wyjątek. - Bryan