Tietojen salaus ja hajautus
Opetelkaa salaamaan arkaluonteiset tiedot levossa ja siirron aikana sekä käyttämään asianmukaisia hajautustekniikoita käyttäjien salasanoille.
Tietojen salaus ja hajautus on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Node.js-taustakehityksen bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.
Tietoturvallisen datan perusteet
Tervetuloa oppitunnille Data Encryption & Hashing! Arkaluonteisten tietojen suojaaminen on nykymaailmassa ensiarvoisen tärkeää. Olipa kyse käyttäjien salasanoista, henkilötiedoista tai taloudellisista tiedoista, niiden suojaaminen on jokaisen kehittäjän keskeinen vastuu.
Tällä oppitunnilla opit tietoja ja saat työkaluja tehokkaiden tietosuojastrategioiden toteuttamiseen Node.js-sovelluksissasi.

Salaus ja hajautus
Ennen tekniikoihin perehtymistä tutustutaan kahteen keskeiseen käsitteeseen:
- Salaus: Kaksisuuntainen prosessi, joka muuntaa datan (selvätekstin) lukukelvottomaan muotoon (salatekstiksi) avaimen avulla. Prosessi voidaan kääntää, eli salateksti voidaan muuntaa takaisin selvätekstiksi oikealla avaimella.
- Hajautus: Yksisuuntainen prosessi, joka muuntaa minkä tahansa kokoisen datan kiinteän kokoiseksi merkkijonoksi (hajautusarvoksi tai tiivisteeksi). Prosessia ei voi kääntää: alkuperäistä dataa ei voi palauttaa hajautusarvosta.
Niillä on eri käyttötarkoitukset!
Symmetrinen salaus
Symmetrisessä salauksessa samaa salaista avainta käytetään sekä datan salaamiseen että salauksen purkamiseen. Se on nopea ja tehokas, joten se sopii suurten datamäärien salaamiseen.
Yleisiä algoritmeja ovat esimerkiksi AES (Advanced Encryption Standard). Avain on pidettävä salassa ja vaihdettava osapuolten välillä turvallisesti.
Node.js:n symmetrinen salaus
Node.js:n sisäänrakennetulla crypto-moduulilla voidaan toteuttaa symmetristä salausta. Seuraavassa on esimerkki AES-256-CBC:n käytöstä. Se on tehokas symmetrinen algoritmi.
Huomautus: Oikeassa sovelluksessa salausavain tulee luoda ja tallentaa turvallisesti (esimerkiksi ympäristömuuttujiin), ja IV:n tulee olla satunnainen jokaisella salaustapahtumalla.
const crypto = require('crypto');
// IMPORTANT: In production, generate this key securely and store it safely!
const ENCRYPTION_KEY = 'averysecretkeyforencryption123456'; // Must be 32 bytes for AES-256
const IV_LENGTH = 16; // For AES-256-CBC, IV is 16 bytes
function encrypt(text) {
const iv = crypto.randomBytes(IV_LENGTH);
const cipher = crypto.createCipheriv(
'aes-256-cbc',
Buffer.from(ENCRYPTION_KEY, 'utf8'),
iv
);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
// Store IV with encrypted data (e.g., as 'iv:encryptedData')
return iv.toString('hex') + ':' + encrypted;
}
function decrypt(text) {
const textParts = text.split(':');
const iv = Buffer.from(textParts.shift(), 'hex');
const encryptedText = textParts.join(':');
const decipher = crypto.createDecipheriv(
'aes-256-cbc',
Buffer.from(ENCRYPTION_KEY, 'utf8'),
iv
);
let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
const message = 'Sensitive data for storage.';
console.log('Original:', message);
const encryptedMessage = encrypt(message);
console.log('Encrypted:', encryptedMessage);
const decryptedMessage = decrypt(encryptedMessage);
console.log('Decrypted:', decryptedMessage);Asymmetrinen salaus
Asymmetrisessä salauksessa, joka tunnetaan myös julkisen avaimen salauksena, käytetään avainparia: julkista avainta ja yksityistä avainta.
- Julkinen avain: Voidaan jakaa kenelle tahansa. Käytetään salaukseen.
- Yksityinen avain: On pidettävä salassa. Käytetään salauksen purkamiseen.
Jos salaat dataa jonkun julkisella avaimella, vain hän voi purkaa salauksen omalla yksityisellä avaimellaan. Tämä on hitaampaa kuin symmetrinen salaus, mutta ratkaisevan tärkeää turvallisessa viestinnässä ja digitaalisissa allekirjoituksissa.
Salasanojen hajautus
Kun käyttäjien salasanoja tallennetaan, ÄLÄ KOSKAAN salaa niitä. Hajauta ne aina sen sijaan. Jos hyökkääjä pääsee käsiksi tietokantaasi, hän löytää parhaassa tapauksessa vain peruuttamattomia hajautusarvoja, ei salauksen avulla palautettavia salasanoja.
Hyvän salasanojen hajautusalgoritmin tulee olla:
- Yksisuuntainen: Mahdoton kääntää.
- Törmäyksenkestävä: On erittäin epätodennäköistä, että kaksi eri syötettä tuottaa saman hajautusarvon.
- Hidas: Suunniteltu tarkoituksella laskennallisesti raskaaksi, jotta murtamiseen perustuvat kokeiluhyökkäykset vaikeutuvat.
Salasanojen suolaus
Salasanojen turvallisuutta voidaan parantaa entisestään käyttämällä suoloja. Suola on yksilöllinen, satunnainen merkkijono, joka lisätään salasanaan ennen sen hajauttamista.
Miksi suoloja käytetään?
- Estää sateenkaaritaulukkohyökkäykset: Ilman suoloja hyökkääjät voisivat laskea yleisten salasanojen hajautusarvot etukäteen (sateenkaaritaulukot).
- Yksilölliset hajautusarvot: Vaikka kahdella käyttäjällä olisi sama salasana, heidän suolatut hajautusarvonsa ovat erilaiset.
Suola tallennetaan yleensä hajautusarvon yhteyteen.
Bcrypt salasanojen hajautukseen
bcrypt on laajasti suositeltu kirjasto salasanojen hajautukseen Node.js:ssä, koska se on suunniteltu hitaaksi ja hoitaa suolauksen automaattisesti.
Se luo yksilöllisen suolan ja suorittaa useita hajautuskierroksia (joita ohjataan saltRounds-arvolla eli työmääräkertoimella), mikä vaikeuttaa kokeiluhyökkäyksiä.
const bcrypt = require('bcrypt');
async function runBcryptExample() {
const password = 'mySecretPassword123';
const saltRounds = 10; // A higher number means more processing time
console.log('Original Password:', password);
// Hash the password with a generated salt
const hashedPassword = await bcrypt.hash(password, saltRounds);
console.log('Hashed Password:', hashedPassword);
// Compare a candidate password with the stored hash
const isMatch = await bcrypt.compare(password, hashedPassword);
console.log('Password Match (correct):', isMatch);
const wrongPassword = 'wrongPassword';
const isWrongMatch = await bcrypt.compare(wrongPassword, hashedPassword);
console.log('Password Match (wrong):', isWrongMatch);
}
runBcryptExample();Siirrettävien tietojen suojaaminen (TLS/SSL)
Vaikka salaus ja hajautus suojaavat levossa olevaa dataa (tietokantaan tallennettua dataa), on yhtä tärkeää suojata dataa sen liikkuessa järjestelmien välillä (siirrettävä data).
TLS/SSL (Transport Layer Security/Secure Sockets Layer) -protokollat salaavat verkkoliikenteen. Kun käyt verkkosivustolla HTTPS-yhteydellä, selain ja palvelin käyttävät TLS/SSL:ää kaiken vaihdettavan datan salaamiseen ja estävät näin salakuuntelun ja manipuloinnin.
Testaa ymmärryksesi
Mitkä seuraavista salaukseen ja hajautukseen liittyvistä väitteistä ovat TOSIA?
Kertaus: tietojen suojaaminen
Hienoa työtä! Olet oppinut datan salauksen ja hajautuksen perusteet:
- Salaus suojaa arkaluonteisia tietoja, ja salaus voidaan purkaa avaimella.
- Hajautus muuntaa tiedot yksisuuntaisesti, joten se sopii erinomaisesti salasanojen tallentamiseen ja tietojen eheyden varmistamiseen.
- Symmetrisessä salauksessa käytetään yhtä avainta, kun taas asymmetrisessä salauksessa käytetään julkisen ja yksityisen avaimen muodostamia avainpareja.
- Käytä salasanoille aina vahvaa, suolattua hajautusta (kuten bcryptiä).
- TLS/SSL suojaa verkoissa siirrettäviä tietoja.
Näiden käytäntöjen toteuttaminen on välttämätöntä turvallisten Node.js-sovellusten rakentamiseksi!
Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 22
- Oppitunnit
- 92
Usein kysytyt kysymykset
Onko oppitunti ”Tietojen salaus ja hajautus” ilmainen?
Kyllä – oppitunnin ”Tietojen salaus ja hajautus” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Node.js-taustakehityksen bootcamp-kurssin, päivitä CoddyKit PROhon. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tietojen salaus ja hajautus”?
Opetelkaa salaamaan arkaluonteiset tiedot levossa ja siirron aikana sekä käyttämään asianmukaisia hajautustekniikoita käyttäjien salasanoille. Harjoittelet Node.js-taustakehityksen bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Node.js-taustakehityksen bootcamp-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Node.js-taustakehityksen bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Tietojen salaus ja hajautus”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Node.js-taustakehityksen bootcamp-oppitunnilla?
Kyllä. Jokainen Node.js-taustakehityksen bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- OWASP Top 10:n ymmärtäminen
- Turvallisen koodin käytännöt Node.js:ssä
- Tietojen salaus ja hajautus
- Pyyntöjen rajoittaminen ja brute force -hyökkäysten torjunta