နားလည်ထားရမယ့် အချက်
Password ဆိုတာ shared secret တစ်ခုပါ - ရိုက်ထည့်ရတယ်၊ transmit ဖြစ်တယ်၊ server က သိမ်းထားတဲ့ value နဲ့ ယှဉ်ကြည့်တယ်။ Passkey ကတော့ private/public credential pair - ဘာမှ ရိုက်ထည့်စရာမလို၊ transmit လည်း မဖြစ်ဘူး။
| နှိုင်းယှဉ်ချက် | Password vs Passkey |
|---|---|
| Phishing resistance | Password - fake site မှာ ရိုက်ထည့်လို့ ဖမ်းယူနိုင်တယ်။ Passkey - domain နဲ့ ချည်နှောင်ထားလို့ fake site မှာ မလုပ်ဆောင်ဘူး။ |
| What's transmitted | Password - secret ကိုယ်တိုင် network ကို ဖြတ်တယ်။ Passkey - signature တစ်ခုတည်း ဖြတ်တယ်, secret ဘယ်တော့မှ မဖြတ်ဘူး။ |
| Reuse risk | Password - service အများကြီးမှာ ပြန်သုံးလို့ ရတယ်, risk ပိုများတယ်။ Passkey - service တစ်ခုစီအတွက် သီးခြား key pair, reuse ဆိုတဲ့ concept ကိုယ်တိုင် မရှိဘူး။ |
| Ecosystem support | Password - almost universal, everywhere run လုပ်တယ်။ Passkey - device, OS, browser, service အလိုက် ကွာခြားတယ်, universal မဖြစ်သေးဘူး။ |
- Phishing resistance - ရိုက်ထည့်စရာ secret မရှိတော့တဲ့အတွက် fake login page က target ဆုံးရှုံးတယ်
- Reduced password reuse - reuse လုပ်စရာ password မရှိတော့လို့ risk category ပျောက်တယ်
- Convenience - မှတ်ရစရာမလို၊ ရိုက်စရာမလို
Universal မဖြစ်သေးဘူး
Support ကတော့ device, OS, browser, service အလိုက် ကွာခြားပါတယ်။ Model နှစ်ခုစလုံးကို ခဏတွဲသုံးနေရဦးမှာပါ။
PASSWORD FLOW vs PASSKEY FLOW
-----------------------------
PASSWORD FLOW vs PASSKEY FLOW
------------------------------
PASSWORD PASSKEY
--------- -------
user types secret service sends challenge
| |
v v
secret TRANSMITTED challenge SIGNED locally
over the network with private credential
| |
v v
server COMPARES it server VERIFIES signature
to stored value using public key only
| |
v v
MATCH -> access SIGNATURE VALID -> access
risk: secret exposed risk: nothing secret
wherever it is typed ever leaves the deviceလက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
အောက်က code က suspicious domain တစ်ခုပေါ်မှာ password-based attempt နဲ့ passkey-based attempt ကို နှိုင်းယှဉ်ပြီး model လုပ်ပြထားတာပါ။ Risk ကို classify လုပ်တဲ့ decision function တစ်ခုသာဖြစ်ပြီး attack tool မဟုတ်ပါဘူး။
- Password on fake site - theft ဖြစ်နိုင်တယ်, secret က technical barrier မရှိဘဲ transmit ဖြစ်တယ်
- Passkey on same fake site - theft မဖြစ်နိုင်ဘူး, domain binding ကြောင့် activate ကိုယ်တိုင် မဖြစ်ဘူး
Domain binding ဆိုတာ သတိထားရမယ့် habit မဟုတ်ဘဲ credential ကိုယ်တိုင်က force ချထားတဲ့ property တစ်ခုပါ။
အတူတူ စမ်းရေးကြည့်မယ်
function analyzeLoginAttempt({ isPasswordBased, isPasskeyBased, isOnASuspiciousDomain }) {
if (isPasswordBased && isOnASuspiciousDomain) {
return {
credentialTheftPossible: true,
reason: "A password is a shared secret that gets typed and transmitted -- on a fake site, the user unknowingly hands that secret straight to the attacker."
};
}
if (isPasskeyBased && isOnASuspiciousDomain) {
return {
credentialTheftPossible: false,
reason: "A passkey is cryptographically bound to the real site's domain -- on a fake domain it simply will not offer itself for use, so there is nothing to steal."
};
}
if (isPasswordBased) {
return {
credentialTheftPossible: false,
reason: "On the legitimate domain no theft occurs here, but the password remains a shared secret that could still be phished elsewhere or reused."
};
}
return {
credentialTheftPossible: false,
reason: "On the legitimate domain the passkey flow completes normally with nothing secret ever transmitted."
};
}
const passwordOnFakeSite = analyzeLoginAttempt({ isPasswordBased: true, isPasskeyBased: false, isOnASuspiciousDomain: true });
const passkeyOnFakeSite = analyzeLoginAttempt({ isPasswordBased: false, isPasskeyBased: true, isOnASuspiciousDomain: true });
console.log(JSON.stringify({ passwordOnFakeSite, passkeyOnFakeSite }, null, 2));Fake site ပေါ်မှာ password ကို run ကြည့်ရင် `credentialTheftPossible: true`, တူညီတဲ့ fake site ပေါ်မှာ passkey ကို run ကြည့်ရင် `credentialTheftPossible: false` ဖြစ်ကြောင်း တွေ့ရပါတယ်။ Output အတိအကျမှာ:
{
"passwordOnFakeSite": {
"credentialTheftPossible": true,
"reason": "A password is a shared secret that gets typed and transmitted -- on a fake site, the user unknowingly hands that secret straight to the attacker."
},
"passkeyOnFakeSite": {
"credentialTheftPossible": false,
"reason": "A passkey is cryptographically bound to the real site's domain -- on a fake domain it simply will not offer itself for use, so there is nothing to steal."
}
}၅ မိနစ် စမ်းကြည့်
`isOnASuspiciousDomain: false` နဲ့ password attempt တစ်ခု run ကြည့်ပါ။ Reason field က ဘယ်လို ပြောင်းသွားလဲ, ဘာကြောင့် legitimate domain ပေါ်မှာတောင် password ကို "safe" လို့ လုံးဝ မခေါ်ဘူးလဲ စဉ်းစားကြည့်ပါ။
သတိလေးတစ်ချက်
Passkey ကို support မလုပ်သေးတဲ့ service တွေမှာတောင် ရှိပြီးသားလို့ ယူဆတာ
Password ကို legitimate domain ပေါ်မှာ သုံးရင် reuse risk လုံးဝ ကင်းလွတ်တယ်လို့ ထင်တာ
Quiz - ဘာကြောင့် Passkey က Phishing ကို ခုခံနိုင်လဲ
Wikipedia — WebAuthn — Digital Privacy & Modern Security