Vaarantuneen salauksen korjaaminen

Nämä tiedot on tarkoitettu kehittäjille, joiden sovelluksissa on vaarantuneita salausmalleja. Salausteksti luodaan staattisesti lasketulla salaisella avaimella, suolalla tai alustusvektorilla. Vaarantuneiden salausten sijainnit löytyvät sovelluksesi Play Console ‑ilmoituksesta. 

Vaarantuneista salausmalleista kertovien varoitusten korjaaminen 

Tarkista sovelluksesi salaustoiminnoissa käytettyjen staattisesti laskettujen avainten, alustusvektoreiden ja/tai suolojen varalta. Varmista, että nämä arvot on muodostettu turvallisesti. Esimerkiksi seuraava koodi käyttää staattisesti laskettavaa salaista avainta ja staattisesti laskettavaa alustusvektoria:

   // Console alert refers to this method
  public byte[] encryptionUtil(String key, String iv, byte[] plainText) {
    Cipher cipher = Cipher.getInstance(“AES/GCM/NoPadding”);
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), “AES”);
    GCMParameterSpec paramSpec = new GCMParameterSpec(256, iv.getBytes());
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
    return cipher.doFinal(plainText);
  }

  // The unsafe key and initialization vector are here and should be changed
  byte[] cipherText = encryptionUtil(“abcdef...”, “010203040506”, plainText);

Staattisesti lasketut arvot
Staattisesti laskettu arvo on sama sovelluksen jokaisella suorituskerralla. Staattisesti lasketut salausarvot voidaan poimia sovelluksesta ja niitä voidaan käyttää sovelluksen salattuun dataan kohdistuviin hyökkäyksiin. Vaikka muokkaisit avaimia, alustusvektoreita ja suoloja monimutkaisilla tavoilla ennen niiden käyttöä, käyttö ei ole turvallista, jos muokkaustapa on sama kaikkia ohjelmia suoritettaessa.

Androidin parhaat käytännöt
Suosittelemme käyttämään symmetriseen salaukseen Jetpack Securitya. Jos sovelluksesi salaa sovellusliittymäavaimia, henkilökohtaisia tunnistetietoja tai muuta arkaluontoista dataa, EncryptedSharedPreferences voi tallentaa dataa turvallisesti ilman, että joudut miettimään salaisten avainten, alustusvektoreiden tai suolojen käyttöä. Lisää parhaita käytäntöjä löytyy tältä sivulta. Kehittäjien kannattaa käyttää TLS/SSL:ää datan siirtämiseksi muihin järjestelmiin, sillä se suojaa dataa siirron aikana. 

Jetpack Security käyttää Googlen avoimen lähdekoodin Tink-projektia symmetrisen todennetun salauksen käsittelyyn. Alemman tason salaustoimintoihin liittyvissä edistyneissä käyttötapauksissa suosittelemme käyttämään Tinkiä suoraan.

Jos yllä mainitut Androidin parhaat käytännöt eivät koske omaa käyttötapaustasi ja sinun on nimenomaisesti hallinnoitava avaimia, alustusvektoreita ja suoloja, suosittelemme näiden standardien noudattamista:

  1. Salaiset avaimet: Symmetristen salaisten avainten on oltava salaisia ja ennakoimattomissa. Paikallisen datan salausta varten kehittäjien kannattaa muodostaa salaiset avaimet salauksella suojatulla satunnaisuudella (tai käyttäjien luomasta datasta, jos käytössä on PBEKeySpecs) ja tallentaa avaimet AndroidKeystorella
  2. Alustusvektorit: Eri viestien alustusvektoreiden on oltava yksilöllisiä ja ennakoimattomissa, mutta niiden ei tarvitse olla salaisia. Kehittäjien tulee muodostaa alustusvektorit salauksella suojatulla satunnaisuudella. Kehittäjien kannattaa tallentaa tai siirtää alustusvektorit niihin liittyvän salaustekstin kanssa.
  3. Suolat: Eri hajautusarvojen suolojen on oltava yksilöllisiä ja arvaamattomia, mutta niiden ei tarvitse olla salaisia. Kehittäjien kannattaa muodostaa suolat salauksella suojatulla satunnaisuudella. Kehittäjien kannattaa tallentaa tai siirtää suolat niihin liittyvien hajautusarvojen kanssa.

Seuraava vaihe

  1. Päivitä sovellus noudattamalla yllä mainittuja ohjeita.
  2. Kirjaudu sisään Play Consoleen ja lähetä sovelluksesi päivitetty versio.
Sovelluksesi tarkistetaan uudelleen. Jos sitä ei ole päivitetty oikein, näet varoituksen edelleen. Tässä voi kestää useita tunteja.

Autamme mielellämme

Voit esittää teknisiä kysymyksiä haavoittuvuudesta Stack Overflow ‑sivustolla. Merkitse kysymyksesi android-security-tagilla.
 
false
Päävalikko
16881449091928160096
true
Ohjekeskushaku
true
true
true
true
true
5016068
false
false