近似同態加密的 IND/SIM-CPA+ 安全性:對于 CKKS 實際有效的攻擊

參考文獻:

  1. [LM21] Li B, Micciancio D. On the security of homomorphic encryption on approximate numbers[C]//Advances in Cryptology–EUROCRYPT 2021: 40th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Zagreb, Croatia, October 17–21, 2021, Proceedings, Part I 40. Springer International Publishing, 2021: 648-677.
  2. [CHK20] Cheon J H, Hong S, Kim D. Remark on the security of ckks scheme in practice[J]. Cryptology ePrint Archive, 2020.
  3. [Bel20] M. Bellare. personal communication, December 2020.
  4. [DS16] Ducas L, Stehlé D. Sanitization of FHE ciphertexts[C]//Advances in Cryptology–EUROCRYPT 2016: 35th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Vienna, Austria, May 8-12, 2016, Proceedings, Part I 35. Springer Berlin Heidelberg, 2016: 294-310.

CKKS 滿足 IND-CPA 安全性,但是并非是 IND-CPA+ 安全的,它在某些 MPC 場景中完全不安全!

文章目錄

  • Preliminaries
    • Passive Attacker
    • Approximate Encryption
  • Security Notions
    • Indistinguishability-Based
    • Simulation-Based
    • Separations Between Them
    • Circuit Privacy and Functional Decryption
  • Attacks to CKKS
    • Linear Key-Recovery Attack
    • Lattice Attack
    • Experiments
  • Against IND-CPA+ Attack

Preliminaries

Passive Attacker

由于 FHE 密文的延展性,安全性 IND-CCA2 是不可達的,同時 IND-CCA1 實際中也難以實現,因此讓人們往往把 IND-CPA 作為設計目標。

然而,在云計算、MPC 等場景下,敵手可以獲得某些消息的解密(訪問了受限的解密神諭),這導致敵手的能力實際上沒能被 IND-CPA 安全性定義所完全捕獲。

我們考慮三方場景(解密者 Alice,服務器 Bob,加密者 Eva):Alice 生成 ( s k , p k ) (sk,pk) (sk,pk),Eva 加密數據 m m m 發送給 Bob,Bob 收到密文 c t ct ct 之后做一定的運算 f f f,將 c t ′ ct' ct 發送給 Alice 解密,最后將 m ′ m' m 發送給 Eva。整個流程中, m , f m,f m,f 可以被 Eva 主動選擇(也可以不選擇、甚至不知道), c t , c t ′ , m ′ ct,ct',m' ct,ct,m 可以被 Eva 被動接收(不可以篡改、不可以注入)。

實際上 Eva 是一個被動敵手(passive attacker),其行為如圖:

在這里插入圖片描述

被動敵手可以通過訪問 FHE 提供的公開標準接口(legitimate operations)構造出某個 m ? m^* m? 對應的 c t ′ ct' ct,要求解密神諭(有能力檢查 c t ′ ct' ct 確實是合法產生的)回應 m ′ m' m,從而可能幫助被動敵手區分密文、甚至私鑰恢復。

Approximate Encryption

Raw (R)LWE Encryption Scheme,

  • KeyGen:私鑰 s ← χ s s \gets \chi_s sχs?,公鑰 ( b : = a ? s + e , a ) (b:=a\cdot s+e,a) (b:=a?s+e,a),其中 a ← U ( R q ) a \gets \mathcal U(\mathcal R_q) aU(Rq?) e ← χ e e \gets \chi_e eχe?
  • Encrypt:簡單計算 c : = u ? ( b , a ) + ( m , 0 ) + ( e 0 , e 1 ) c:=u \cdot (b,a) + (m,0) + (e_0,e_1) c:=u?(b,a)+(m,0)+(e0?,e1?),其中 u ← χ r u \gets \chi_r uχr? e 0 , e 1 ← χ e e_0,e_1 \gets \chi_e e0?,e1?χe?
  • Decrypt:簡單輸出 m ′ : = ? s , c ? ( m o d q ) m':=\langle s,c\rangle \pmod q m:=?s,c?(modq),易知 m ′ = m + e ′ m'=m+e' m=m+e

注意上述的加解密不包含編碼(糾錯碼、SIMD 打包),解密就是一個線性運算

  1. 如果采取了糾錯碼(比如 MSD 編碼),使滿足解密正確性,稱之為精確同態方案(Exact),比如 BGV、BFV
  2. 如果密文的解密結果不是精確值,稱之為近似同態方案(Approximate),比如 CKKS

CKKS 因為沒有使用 Δ ≈ q / t \Delta \approx q/t Δq/t 縮放因子,這使得噪聲增長速度比 BGV、BFV 慢得多,因此可以執行特別深的電路(而不必自舉)

采取 BV 的 tensor 技術,采取 GHS 的 raising the modulus 技術,同態乘法為:

  • 預計算:運算秘鑰 e v k = ( b : = a s + e + p s 2 , a ) ∈ R p q 2 evk=(b:=as+e+ps^2, a) \in \mathcal R_{pq}^2 evk=(b:=as+e+ps2,a)Rpq2?,其中 a ← U ( R p q ) a \gets \mathcal U(\mathcal R_{pq}) aU(Rpq?) e ← χ e e \gets \chi_e eχe?

  • 在線計算:輸入 c 0 , c 1 ∈ R q 2 c_0,c_1\in \mathcal R_{q}^2 c0?,c1?Rq2?,計算多項式乘積并且重線性化,
    c = ( b 0 b 1 , a 0 b 1 + a 1 b 0 ) + ? [ a 0 a 1 ] q ? e v k p ? ( m o d q ) c = (b_0b_1, a_0b_1+a_1b_0) + \left\lfloor \frac{[a_0a_1]_q \cdot evk}{p} \right\rceil \pmod q c=(b0?b1?,a0?b1?+a1?b0?)+?p[a0?a1?]q??evk??(modq)

CKKS 選取模數為 q l = q 0 ? p l q_l=q_0 \cdot p^l ql?=q0??pl,其中 p = 2 p=2 p=2 是 base, l l l 是 level,密文 ( c , Δ , l ) (c,\Delta,l) (c,Δ,l) 是帶標記的,其中的 Δ \Delta Δ 是定點數的縮放因子,SIMD 編碼是 $m=Encode(z;\Delta):=\lfloor \phi^{-1}(\Delta \cdot z)\rceil $,映射 ? : R → C N / 2 \phi: \mathcal R \to \mathbb C^{N/2} ?:RCN/2 是典范嵌入,選用 ζ 2 N 4 j + 1 , j ∈ [ N / 2 ] \zeta_{2N}^{4j+1},j \in [N/2] ζ2N4j+1?,j[N/2] 作為根。

為了控制噪聲增長速度,使用 Rescaling 技術(就是 BGV 的模切換),
R S ( ( c ∈ R q l 2 , Δ , l ) , l ′ ) = ( ? c p l ? l ′ ? ∈ R q l ′ 2 , p l ? l ′ Δ , l ′ ) RS((c \in \mathcal R_{q_{l}}^2,\Delta,l), l') = \left(\left\lfloor \frac{c}{p^{l-l'}} \right\rceil \in \mathcal R_{q_{l'}}^2, p^{l-l'}\Delta, l'\right) RS((cRql?2?,Δ,l),l)=(?pl?lc??Rql?2?,pl?lΔ,l)
CKKS 的線性解密結果為 m ′ = m + e ∈ R q m'=m+e \in \mathcal R_q m=m+eRq?,其中 $m=\lfloor \phi^{-1}(\Delta \cdot z)\rceil $,最終的輸出是近似值 z ′ = D e c o d e ( m ′ ; Δ ) : = ? ( m ′ / Δ ) = z + e ′ z' = Decode(m';\Delta):= \phi(m'/\Delta) = z+e' z=Decode(m;Δ):=?(m)=z+e

Security Notions

Indistinguishability-Based

[LM21] 首先基于游戲,給出了 IND-CPA+ 的定義,

在這里插入圖片描述

Simulation-Based

[LM21] 接著基于模擬,給出了 SIM-CPA+ 的定義,

在這里插入圖片描述

在這里插入圖片描述

Separations Between Them

易知,IND-CPA+ 立即導致 IND-CPA(它僅訪問一次 E,并且不訪問 H 和 D),可以證明 IND-CPA+ 是嚴格強的:

  • 對于精確同態加密,[LM21] 證明了 IND-CPA+ 等價于 IND-CPA
  • 對于近似同態加密,[LM21] 證明了 IND-CPA+ 嚴格強于 IND-CPA

可以證明,SIM-CPA+ 導致了 IND-CPA+,并且兩者相分離(SIM-CPA+ 嚴格更強):

  • 對于精確同態加密,[LM21] 證明了 SIM-CPA+ 等價于 IND-CPA+
  • 對于近似同態加密,[Bel20] 證明了 SIM-CPA+ 嚴格強于 IND-CPA+

確切地說,我們定義有界查詢數量的變體 ( q , l ) (q,l) (q,l)-IND-CPA+ 和 ( q , l ) (q,l) (q,l)-SIM-CPA+,它對于任意的受限敵手滿足上述 IND-CPA+ 安全定義、SIM-CPA+ 安全定義,除了這里的敵手只能訪問至多 l ( κ ) l(\kappa) l(κ) 次 E 和 H 神諭,訪問至多 q ( κ ) q(\kappa) q(κ) 次 D 神諭。[LM21] 證明了:對于任意的 q ≥ 2 q \ge 2 q2,都存在 ( q , l ) (q,l) (q,l)-SIM-CPA+ 安全,但是 ( q + 1 , l ) (q+1,l) (q+1,l)-IND-CPA+ 不安全的近似同態加密。因此,在 IND-CPAIND-CPA+ 之間,存在無限長的安全性(嚴格)遞增的安全性序列

此外,上述的定義都是適應性的(security with adaptively chosen queries):敵手可以主動選取不同的查詢次數和順序。我們可以要求敵手在看到 p k , e v k pk,evk pk,evk 之前就已經確定了它的查詢順序,這就是非適應的(fully non-adaptive model)。[LM21] 證明了非適應安全比適應性安全弱的多:存在近似同態加密方案,它是 SIM-CPA+ 非適應安全的,但不是 ( 2 , 2 ) (2,2) (2,2)-IND-CPA+ 適應性安全的。

Circuit Privacy and Functional Decryption

Circuit Privacy:電路隱私是說,從 E n c ( m ) Enc(m) Enc(m) 同態計算出 E n c ( f ( x ) ) Enc(f(x)) Enc(f(x)),不會泄露 f f f 的信息。

Functional Decryption:函數解密是說,選取 f ∈ L f \in \mathcal L fL,要求 D 神諭回應 f ( D e c ( c ) ) f(Dec(c)) f(Dec(c)),而非 m = D e c ( c ) m=Dec(c) m=Dec(c) 本身。

[LM21] 簡單描述了如何將 IND-CPA+ 以及 SIM-CPA+ 的安全性定義擴展到兩者。

Attacks to CKKS

[LM21] 給出了 CKKS 的被動敵手下的私鑰恢復攻擊(這遠比 IND-CPA+ 攻擊更強),因此 CKKS 雖然是 IND-CPA 安全,卻不是 IND-CPA+ 安全。

Linear Key-Recovery Attack

簡單起見,我們考慮對稱加密。

如果敵手可以獲得密文 c = ( b : = a ? s + m + e , a ) c=(b:=a \cdot s+m+e,a) c=(b:=a?s+m+e,a) 的解密 m ′ = m + e m'=m+e m=m+e,那么
b ? m ′ = a ? s ( m o d q ) b-m' = a \cdot s \pmod q b?m=a?s(modq)
它是關于 s s s 的線性方程,

  • 對于 LWE-based,只需要收集 n n n 個線性方程組,就可以求解出 s s s
  • 對于 RLWE-based,只要 a ∈ R q a \in \mathcal R_q aRq? 可逆,甚至只需要一個方程,就可以計算出 s = ( b ? m ′ ) ? a ? 1 s=(b-m') \cdot a^{-1} s=(b?m)?a?1

CKKS 的模數為 q l = q 0 ? 2 l q_l=q_0 \cdot 2^l ql?=q0??2l,導致 a ∈ R q a \in \mathcal R_q aRq? 基本都是不可逆的,但依舊可以恢復出 s s s 的部分信息

Lattice Attack

CKKS 采取了 SIMD 編碼,最終的解密結果是 z ′ = D e c o d e ( m ′ ) z'=Decode(m') z=Decode(m) 而非 m ′ m' m 本身

[LM21] 采取重編碼手段,嘗試恢復出 m ′ m' m

  • 如果 E n c o d e ( z ′ ) = D e c ( E n c ( m ; e ) ) Encode(z') = Dec(Enc(m;e)) Encode(z)=Dec(Enc(m;e)),那么獲得 m ′ = m + e m'=m+e m=m+e 之后,可以采取上述的線程代數的手段恢復出私鑰
  • 如果 E n c o d e ( z ′ ) = D e c ( E n c ( m ; e ) ) + ? Encode(z') = Dec(Enc(m;e))+\epsilon Encode(z)=Dec(Enc(m;e))+?,只要 ∥ ? ∥ 2 ≤ 2 ? N / 2 ? ( q N ? h ) , h = H W ( s ) \|\epsilon\|_2 \le 2^{-N/2} \cdot (q\sqrt N-h), h=HW(s) ?2?2?N/2?(qN ??h),h=HW(s),那么使用格基約簡求解近似 CVP 問題,依舊可以高效恢復出私鑰

在多種 CKKS 的實現中(HEAAN、HElib、SEAL、PALISADE),編碼解碼過程都是利用 double-precision FFT 完成的。而密文的存儲/運算,有些使用 Multi-precision Integer,有些則使用 RNS 系統。總體上,CKKS 的計算精度越高,那么 ? \epsilon ? 就越小,這導致更加有效的攻擊。

Experiments

僅使用線性代數攻擊 CKKS,

在這里插入圖片描述

對于不同實現的攻擊結果,

在這里插入圖片描述

Against IND-CPA+ Attack

最后 [LM21] 建議修改解密函數,不要輸出 m ′ = m + e ~ m'=m+\tilde e m=m+e~(其中的 e ~ \tilde e e~ 包含了 s k sk sk u , e u,e u,e 的信息),而是輸出一個近似值(不依賴私鑰和隨機帶)

  1. 添加高斯噪聲:簡單在解密結果上添加高斯噪聲,但是敵手可以通過多次解密同一個密文,統計出原本的解密結果
  2. 添加確定性噪聲:利用 PRF 關于 ct 計算出確定的噪聲(強制每個密文至多解密一次),這個類似于噪聲洪泛(noise flooding techniques),但是需要超多項式的模數。或者使用 [DS16] 的密文消毒(Sanitization of FHE Ciphertexts,通過 soak-spin-repeat 策略,迭代 Rerandomize、Bootstrapping 滾洗),使用較小的參數達到某個先驗的界 q q q-IND-CPA+ 安全
  3. 精確解密:選取合適的 Δ \Delta Δ 使得高概率滿足 ? ( m + e ~ ) / Δ ? = ? m / Δ ? \lfloor (m+\tilde e)/\Delta\rceil = \lfloor m/\Delta\rceil ?(m+e~)?=?m?(后者是精確值),輸出近似值 ? ( m + e ~ ) / Δ ? \lfloor (m+\tilde e)/\Delta\rceil ?(m+e~)? 而非 m + e ~ m+\tilde e m+e~ 本身,這似乎是對于 CKKS 更有前途的

[CHK20] 對 HEAAN 做了修改,提供了兩種場景下的解密函數,

  • Dec:這是原始的解密函數,它提供了 IND-CPA 安全,不允許泄露解密結果給任何人
  • DecForShare:對解密結果添加一定的高斯噪聲,但是 B c t x t B_{ctxt} Bctxt? 的規模 [CHK20] 并沒有具體給出

[CHK20] 調查了其他幾個實現的辦法:

  • HElib 粗糙地估計各個密文的噪聲上界 B B B,然后根據它來添加噪聲
  • PALISADE 限制明文空間僅使用實部,虛部強行置為 0 0 0,運算過程中虛部會累積一定的噪聲,用它們來估計密文的噪聲規模
  • Lattigo 要求用戶提供期望的輸出精度 b b b,然后執行 DecodeAndRound,舍入解碼的結果
  • SEAL 簡單要求用戶不要泄露解密結果(躺平了)

但是上述這些都只能緩解問題,重新設計一個更加安全可靠的近似同態加密,仍是個開放問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux】命令expect使用詳解

🦄 個人主頁——🎐個人主頁 🎐?🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感謝點贊和關注 ,每天進步一點點!加油!&…

【上海大學數字邏輯實驗報告】五、記憶元件測試

一、實驗目的 掌握R-S觸發器、D觸發器和JK觸發器的工作原理及其相互轉換。學會用74LS00芯片構成鐘控RS觸發器。學會用74LS112實現D觸發器學會在Quartus II上用D觸發器實現JK觸發器。 二、實驗原理 基本R-S觸發器是直接復位-置位的觸發器,它是構成各種功能的觸發器…

AI文檔助手,當下熱門的AI文檔助手【2024】

在當今信息爆炸的時代,文檔創作的需求愈發龐大。為了滿足用戶對高效、準確、原創性文檔的需求,人工智能技術的應用日益廣泛。本文將專心分享AI文檔助手領域的熱門推薦。 AI文檔助手的背景與應用 AI文檔助手作為人工智能技術在文檔創作領域的一大應用&am…

nginx配置自建SSL證書

文章目錄 前言配置SSL證書SSL證書放在 Nginx 而不放在應用服務器上的好處Nginx只能轉發http協議嗎Nginx轉發TCP協議會收到端口限制嗎Nginx本身能將Websocket數據轉化成TCP數據嗎總結 前言 之前的一篇文章《自建CA并生成自簽名SSL證書》中講到為什么要自建CA和自簽名SSL證書&am…

velocity-engine-core是什么?Velocity模板引擎的使用

velocity-engine-core是什么?Velocity模板引擎的使用 1. 常見的模板引擎2. Velocity 的語法3.Velocity的使用 相信在日常開發中或多或少都聽過或者使用過模板引擎,比如熟知的freemarker, thymeleaf等。而模板引擎就是為了實現View和Data分離而產生的。 而…

C++封裝、繼承(單繼承)、多態詳細分析。

系列文章目錄 文章目錄 系列文章目錄摘要一、基本概念二、多態的分類三、多態的實現3.1 類型兼容與函數重寫3.2 動態聯編與靜態聯編3.3 虛函數3.4 動態多態的實現過程 總結參考文獻 摘要 多態性特征是 C中最為重要的一個特征,熟練使用多態是學好 C的關鍵&#xff0…

Kotlin關鍵字二——constructor和init

在關鍵字一——var和val中最后提到了構造函數,這里就學習下構造函數相關的關鍵字: constructor和init。 主要構造(primary constructor) kotlin和java一樣,在定義類時就自動生成了無參構造 // 會生成默認的無參構造函數 class Person{ }與java不同的是…

configure腳本的常用參數

下面是一些常用的configure選項參數及其解釋&#xff1a; --prefix<directory>&#xff1a;指定安裝目錄--with-<package>&#xff1a;指定依賴的外部庫或軟件包--enable-<feature>&#xff1a;啟用某個特性--disable-<feature>&#xff1a;禁用某個特…

原創 | 數據的確權、流通、入表與監管研究(一):數據與確權

作者&#xff1a;張建軍&#xff0c;中國電科首席專家&#xff0c;神州網信技術總監 本文約7100字&#xff0c;建議閱讀10分鐘 本文主要介紹數據與數據分類、數據確權規則、數據的所有權與其他權利等方面內容&#xff0c;并進行案例分析。 2022年12月發布的《關于構建數據基礎制…

Linux 和 macOS 的主要區別在哪幾個方面呢?

(??? )&#xff0c;Hello我是祐言QAQ我的博客主頁&#xff1a;C/C語言&#xff0c;數據結構&#xff0c;Linux基礎&#xff0c;ARM開發板&#xff0c;網絡編程等領域UP&#x1f30d;快上&#x1f698;&#xff0c;一起學習&#xff0c;讓我們成為一個強大的攻城獅&#xff0…

uniapp實戰 —— 彈出層 uni-popup (含vue3子組件調父組件的方法)

效果預覽 彈出的內容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子組件調父組件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

ALSA Compress-Offload API

概述 從 ALSA API 的早期開始&#xff0c;它就被定義為支持 PCM&#xff0c;或考慮到了 IEC61937 等固定比特率的載荷。參數和返回值以幀計算是常態&#xff0c;這使得擴展已有的 API 以支持壓縮數據流充滿挑戰。 最近這些年&#xff0c;音頻數字信號處理器 (DSP) 常常被集成…

git如何配置多個遠程倉庫,并且進行切換

一、配置多個遠程倉庫并進行切換&#xff0c;請按照以下步驟進行操作&#xff1a; 打開命令行終端&#xff0c;并進入您的 Git 倉庫所在的目錄。添加第一個遠程倉庫&#xff0c;使用以下命令&#xff1a;git remote add origin <第一個遠程倉庫的 URL>這里將遠程倉庫命名…

C# .NET平臺提取PDF表格數據,并轉換為txt、CSV和Excel表格文件

處理PDF文件中的內容是比較麻煩的事情&#xff0c;特別是以表格形式呈現的各種數據。為了充分利用這些寶貴的數據資源&#xff0c;我們可以通過程序提取PDF文件中的表格&#xff0c;并將其保存為更易于處理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;從而更方便地對…

leetcode面試經典150題——35 螺旋矩陣

題目&#xff1a; 螺旋矩陣 描述&#xff1a; 給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Redis Geo操作地理位置

Redis Geo 使用場景API列表名詞API列表Springboot使用mavenyamlTest 注意事項 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存儲和操作地理位置信息 使用場景 滴滴打車&#xff1a;這是一個對地理位置精度要求較高的場景。通過使用Redis的GEO功能&#xff0c;滴滴…

12月8日作業

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數&#xff1b;將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷u界面上輸入的賬號是否為"admin"&#xff0c;…

kafka學習筆記--安裝部署、簡單操作

本文內容來自尚硅谷B站公開教學視頻&#xff0c;僅做個人總結、學習、復習使用&#xff0c;任何對此文章的引用&#xff0c;應當說明源出處為尚硅谷&#xff0c;不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;從入門到調優…

Day54力扣打卡

打卡記錄 出租車的最大盈利&#xff08;動態規劃&#xff09; 鏈接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《考慮源網荷效益的峰谷電價與峰谷時段雙層優化模型》

這個標題涉及到電力定價和能源效益的優化模型。讓我來分解一下&#xff1a; 峰谷電價&#xff1a;這是一種電力定價策略&#xff0c;即在一天內不同時間段設定不同的電價。通常&#xff0c;高峰時段&#xff08;需求高&#xff09;的電價相對較高&#xff0c;而低谷時段&#x…