Deno 2 になって --allow-hrtime
パーミッションフラグが削除されました。
--allow-hrtime
は、高精度の時刻情報の取得を許可するためのフラグです。このフラグを与えることで、performance.now()
API からナノ秒単位の時刻を取得することが出来ます(出来ました)。逆に、このフラグを与えない場合は、performance.now()
の精度がミリ秒単位に丸められるという挙動になっていました。
console.log(peformance.now());
$ deno -v
deno 1.46.3
$ deno a.js
16
$ deno --allow-hrtime a.js
9.945084
このような高精度の時刻情報を利用して、CPU の投機的実行情報を抜き取る攻撃手法 (Spectre) が知られており、そのような攻撃を封じるために、デフォルトでそのような API を無効化し、明示的に --allow-hrtime
フラグを与えた場合のみ許可するという仕様になっていました。
しかし、現在では、このような高精度タイマー情報を利用しなくても、SharedArrayBuffer と Web Worker を利用することで、実質的なタイマーを自作する攻撃手法が知られています。したがって、高精度タイマーAPIを封じる事が Spectre 攻撃に対するセキュリティとして機能してないため、このフラグにはあまり存在意義がない状態になっていました。
参考記事
以上の理由によって、Deno 2 では --allow-hrtime
パーミッションは削除されました。