<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness?]]></title><description><![CDATA[<blockquote>
<p dir="auto">[!WARNING]<br />
<strong>Technical Redaction &amp; Safe Harbor Notice</strong>:<br />
All communication captures, system titles, and cryptographic parameters in this thread have been sanitized and neutralized. Real utility meter identifiers, production encryption keys (GUEK/GAK/MK), SIM IMSIs, and proprietary network envelopes have been substituted with standard IEC 62056 synthetic test vectors. Do not post unredacted production captures or live cryptographic keys.</p>
</blockquote>
<p dir="auto">We are implementing High-Level Security Mechanism 5 (HLS 5 GMAC, Security Suite 1) against commercial three-phase electricity meters over IEC 62056-47 TCP Wrapper. The initial Association establishment (<code>0x60</code> <code>AARQ</code> $\rightarrow$ <code>0x61</code> <code>AARE</code>) succeeds, exchanging the 16-byte Client Challenge ($C_{\text{to}}S$) and Server Challenge ($S_{\text{to}}C$).</p>
<p dir="auto">However, when the client sends Pass 3 via <code>Action-Request-Normal</code> calling Method 1 <code>reply_to_HLS_authentication</code> on <code>Association LN</code> (<code>0.0.40.0.0.255</code>, Class 15), the meter consistently rejects the authentication proof with an action error.</p>
<h3>Pass 3 Client Action-Request (<code>reply_to_HLS_authentication</code><img src="https://dlms.sharur.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f61e.png?v=666d1e6b6e4" class="not-responsive emoji emoji-android emoji--disappointed" style="height:23px;width:auto;vertical-align:middle" title="):" alt="😞" /></h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 24 C3 01 81 00 0F 00 00 28 00 00 FF 01 01 09 10 5B 3A 8F 21 C8 91 44 E2 70 66 A3 11 9D 52 04 7A
</code></pre>
<h3>Meter Error Response:</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 05 C7 01 81 01 01
</code></pre>
<p dir="auto">Dissecting the response:</p>
<ul>
<li><code>C7 01</code>: <code>Action-Response-Normal</code></li>
<li><code>81</code>: <code>invoke-id-and-priority</code></li>
<li><code>01</code>: Choice = <code>action-result</code> (error)</li>
<li><code>01</code>: Result enum = <code>hardware-fault</code> (access-error: authentication-failure / other-reason)</li>
</ul>
<p dir="auto">We verified that both the Global Authentication Key (GAK) and Global Unicast Encryption Key (GUEK) are configured in the client. Our initial hypothesis was that the meter firmware had a corrupted key storage sector. Why is the GMAC authentication tag rejected by the meter?</p>
]]></description><link>https://dlms.sharur.org/topic/88/why-does-hls-5-gmac-mutual-authentication-fail-in-reply_to_hls_authentication-action-request-due-to-green-book-aad-construction-and-invocation-counter-endianness</link><generator>RSS for Node</generator><lastBuildDate>Fri, 16 Oct 2026 19:14:36 GMT</lastBuildDate><atom:link href="https://dlms.sharur.org/topic/88.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Sep 2026 06:06:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:23 GMT]]></title><description><![CDATA[<p dir="auto">To provide a definitive, runnable implementation for the community, here is a complete Python script using standard <code>cryptography</code> primitives implementing DLMS Green Book 10th Ed compliant HLS 5 GMAC tag computation and mutual verification:</p>
<pre><code class="language-python">import struct
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

def compute_hls5_gmac(auth_key: bytes, sys_title: bytes, ic: int, challenge: bytes, sc: int = 0x10) -&gt; bytes:
    """
    Computes DLMS Green Book 10th Ed HLS 5 GMAC Tag (Pass 3 / Pass 4).
    """
    assert len(auth_key) == 16, "Authentication Key must be 16 bytes (AES-128)"
    assert len(sys_title) == 8, "System Title must be 8 bytes"
    assert len(challenge) == 16, "Challenge must be 16 bytes"
    
    # 1. Construct 12-byte IV = SystemTitle (8B) || InvocationCounter (4B Big-Endian)
    iv = sys_title + struct.pack("&gt;I", ic)
    
    # 2. Construct 17-byte AAD = SecurityControl (1B) || AuthenticationKey (16B)
    aad = bytes([sc]) + auth_key
    
    # 3. AES-GCM Encrypt with Challenge as Plaintext
    aesgcm = AESGCM(auth_key)
    ciphertext_and_tag = aesgcm.encrypt(iv, challenge, aad)
    
    # In AES-GCM, the last 16 bytes are the Authentication Tag
    tag = ciphertext_and_tag[-16:]
    return tag

def verify_server_proof(auth_key: bytes, server_sys_title: bytes, server_ic: int, 
                        client_challenge: bytes, server_tag: bytes) -&gt; bool:
    """
    Verifies Pass 4 Server Proof returned in Action-Response.
    """
    expected_tag = compute_hls5_gmac(auth_key, server_sys_title, server_ic, client_challenge)
    return expected_tag == server_tag

# Example Test Vector Execution
if __name__ == "__main__":
    gak = bytes.fromhex("000102030405060708090A0B0C0D0E0F")
    client_title = bytes.fromhex("434C540000000001")
    stoc = bytes.fromhex("AABBCCDDEEFF00112233445566778899")
    client_ic = 1
    
    client_proof = compute_hls5_gmac(gak, client_title, client_ic, stoc)
    print(f"[+] Computed Pass 3 Client GMAC Proof: {client_proof.hex().upper()}")
</code></pre>
<h3>Summary Checklist for HLS 5 GMAC Implementations:</h3>
<ol>
<li><strong>$AAD$ Length</strong>: Strictly 17 bytes ($SC \parallel AK$), never include the Challenge in AAD.</li>
<li><strong>Challenge Role</strong>: Pass $S_{\text{to}}C$ / $C_{\text{to}}S$ as the 16-byte authenticated plaintext.</li>
<li><strong>$IC$ Byte Order</strong>: Always big-endian 4-byte unsigned integer in $IV$.</li>
<li><strong>Dual Verification</strong>: Always verify Pass 4 Server Proof using Server System Title before proceeding.</li>
</ol>
]]></description><link>https://dlms.sharur.org/post/325</link><guid isPermaLink="true">https://dlms.sharur.org/post/325</guid><dc:creator><![CDATA[alex_turner]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:20 GMT]]></title><description><![CDATA[<p dir="auto">Here is the complete, bit-accurate, verified 4-Pass exchange for the entire HLS 5 GMAC handshake:</p>
<h3>Pass 1: Client <code>AARQ</code> (Proposing HLS5 GMAC, CtoS = 16B):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 48 60 46 A1 09 06 07 60 85 74 05 08 01 01 A6 0A 04 08 43 4C 54 00 00 00 00 01 8A 02 07 80 8B 07 60 85 74 05 08 02 05 AC 12 80 10 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF 00 BE 10 04 0E 01 00 00 00 06 5F 1F 04 00 00 7E 1F 04 00
</code></pre>
<ul>
<li><code>AC 12 80 10 ...</code>: <code>calling-authentication-value</code> = $C_{\text{to}}S$ (<code>11 22 33 ... FF 00</code>)</li>
</ul>
<h3>Pass 2: Meter <code>AARE</code> (Accepting HLS5, StoC = 16B):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 42 61 40 A1 09 06 07 60 85 74 05 08 01 01 A2 03 02 01 00 A3 05 A1 03 02 01 00 A4 0A 04 08 4D 4D 4D 00 00 00 00 01 88 02 07 80 89 07 60 85 74 05 08 02 05 AA 12 80 10 AA BB CC DD EE FF 00 11 22 33 44 55 66 77 88 99 BE 06 04 04 0E 01 00 00
</code></pre>
<ul>
<li><code>AA 12 80 10 ...</code>: <code>responding-authentication-value</code> = $S_{\text{to}}C$ (<code>AA BB CC ... 88 99</code>)</li>
</ul>
<h3>Pass 3: Client <code>Action-Request</code> (<code>reply_to_HLS_authentication</code> with Client GMAC Tag):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 24 C3 01 81 00 0F 00 00 28 00 00 FF 01 01 09 10 7E C1 45 B9 28 D3 9A 04 F1 B2 66 81 CC 30 E8 5A
</code></pre>
<ul>
<li><code>7E C1 ... E8 5A</code>: Verified Client GMAC Tag $f(S_{\text{to}}C)$ computed with $AAD = SC \parallel AK$.</li>
</ul>
<h3>Pass 4: Meter <code>Action-Response</code> (Success with Server GMAC Tag):</h3>
<pre><code class="language-hex">00 01 00 01 00 01 00 17 C7 01 81 00 01 09 10 9D E4 71 0A BC 32 F1 88 4A 1B 03 E9 CD 8F 22 10
</code></pre>
<ul>
<li><code>9D E4 ... 22 10</code>: Verified Server GMAC Tag $f(C_{\text{to}}S)$ successfully verified by HES.</li>
</ul>
]]></description><link>https://dlms.sharur.org/post/324</link><guid isPermaLink="true">https://dlms.sharur.org/post/324</guid><dc:creator><![CDATA[david_miller]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:18 GMT]]></title><description><![CDATA[<p dir="auto">From the field triage and deployment perspective, there is a major practical trap: <strong>Cold-Start Invocation Counter Desynchronization</strong>.</p>
<p dir="auto">Consider this real-world scenario:</p>
<ol>
<li>A meter undergoes a battery replacement or hardware power cycle in the field, resetting its volatile memory or rolling back its internal Invocation Counter ($IC$) to <code>1</code>.</li>
<li>The Head-End System (HES) database still stores the last recorded meter counter, say $IC = 482,105$.</li>
<li>When HES attempts an HLS 5 handshake, the meter sends its Server Challenge with $IC = 1$. The HES security gate rejects the frame because $IC_{\text{received}} &lt; IC_{\text{expected}}$ (anti-replay defense per <strong>DLMS Green Book Section 9.2.7.2</strong>).</li>
</ol>
<h3>How to Recover Without Compromising Security:</h3>
<p dir="auto">Before initiating HLS 5 on Management Logical Device:</p>
<ul>
<li>Connect as <strong>Public Client (Client ID 16)</strong> with <code>No Security</code> (<code>0x00</code>).</li>
<li>Read <code>Association LN</code> (<code>0.0.40.0.0.255</code>, Class 15) Attribute 8 or <code>Security Setup</code> (<code>0.0.43.1.0.255</code>, Class 64) Attribute 4 (<code>invocation_counter</code>).</li>
<li>If authorized by security policy, read and resynchronize the baseline $IC$ in the HES database before triggering High-Level Security.</li>
</ul>
]]></description><link>https://dlms.sharur.org/post/323</link><guid isPermaLink="true">https://dlms.sharur.org/post/323</guid><dc:creator><![CDATA[carlos_mendez]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:16 GMT]]></title><description><![CDATA[<p dir="auto">To verify Pass 4 (Server Proof), HES must execute the mirror-image GMAC computation using the meter's cryptographic credentials.</p>
<p dir="auto">Per <strong>DLMS Green Book 10th Ed Section 9.2.7.2 (Authentication Procedures)</strong>:</p>
<h3>Pass 4 Verification Parameters:</h3>
<ol>
<li><strong>Key</strong>: The shared Global Authentication Key ($GAK$).</li>
<li><strong>Security Control Byte ($SC$)</strong>: <code>0x10</code> (Authentication only).</li>
<li><strong>$AAD$ (17 bytes)</strong>: $\text{SecurityControl (0x10)} \parallel GAK$.</li>
<li><strong>Plaintext ($P$)</strong>: The 16-byte <strong>Client Challenge ($C_{\text{to}}S$)</strong> originally generated by HES and sent in <code>AARQ</code>.</li>
<li><strong>Initialization Vector ($IV_{\text{StoC}}$)</strong>:<br />
$$IV_{\text{StoC}} = \text{Server System Title (8B)} \parallel \text{Server Invocation Counter (4B)}$$</li>
</ol>
<h3>Critical Rules for HES Verification:</h3>
<ul>
<li><strong>Server System Title</strong>: Extracted from the <code>responding-AP-title</code> field in the <code>AARE</code> frame (8 bytes, e.g. <code>4D 4D 4D 00 00 00 00 01</code>).</li>
<li><strong>Server Invocation Counter</strong>: Must match the meter's current transmit invocation counter. In standard HLS 5 handshakes, the meter uses its current internal $IC_{\text{server}}$.</li>
<li>If HES computes the GMAC tag over $C_{\text{to}}S$ with $IV_{\text{StoC}}$ and the resulting tag matches <code>9D E4 71 0A BC 32 F1 88 4A 1B 03 E9 CD 8F 22 10</code>, the meter's identity is authenticated.</li>
</ul>
]]></description><link>https://dlms.sharur.org/post/322</link><guid isPermaLink="true">https://dlms.sharur.org/post/322</guid><dc:creator><![CDATA[elena_rostova]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:12 GMT]]></title><description><![CDATA[<p dir="auto">We immediately adjusted our HES crypto pipeline to adopt the Green Book 10th Ed AAD layout ($SC \parallel AK$) and verified big-endian $IC$ serialization.</p>
<p dir="auto">The meter instantly accepted Pass 3! Here is the <code>Action-Response-Normal</code> returned by the meter:</p>
<pre><code class="language-hex">00 01 00 01 00 01 00 17 C7 01 81 00 01 09 10 9D E4 71 0A BC 32 F1 88 4A 1B 03 E9 CD 8F 22 10
</code></pre>
<p dir="auto">Dissecting the meter response:</p>
<ul>
<li><code>C7 01</code>: <code>Action-Response-Normal</code></li>
<li><code>81</code>: <code>invoke_id = 1</code></li>
<li><code>00</code>: <code>action-result</code> = <code>success</code> (<code>0</code>)</li>
<li><code>01</code>: <code>Get-Data-Result</code> choice = <code>data</code> (presence of return value)</li>
<li><code>09 10</code>: <code>Octet-String</code> of 16 bytes: <code>9D E4 71 0A BC 32 F1 88 4A 1B 03 E9 CD 8F 22 10</code></li>
</ul>
<p dir="auto">This 16-byte value is Pass 4: the <strong>Server Proof ($f(C_{\text{to}}S)$)</strong>. How must our Head-End System verify this Server Proof to ensure mutual authentication integrity before issuing sensitive operational commands?</p>
]]></description><link>https://dlms.sharur.org/post/321</link><guid isPermaLink="true">https://dlms.sharur.org/post/321</guid><dc:creator><![CDATA[marcus_vance]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:09 GMT]]></title><description><![CDATA[<p dir="auto">Let's dissect the mathematical GHASH calculation to see exactly why the GMAC tag diverged.</p>
<p dir="auto">In AES-GCM (NIST SP 800-38D), the hash subkey is $H = \text{AES}_{K}(0^{128})$.<br />
Given $AAD = A$ and Plaintext = $P$:</p>
<p dir="auto">$$GHASH(H, A, P) = X_{m+n+1}$$<br />
where the final block is the length vector:<br />
$$L = [\text{len}(A)]<em>{64} \parallel [\text{len}(P)]</em>{64}$$</p>
<ol>
<li>
<p dir="auto"><strong>Under Green Book 10th Ed</strong>:</p>
<ul>
<li>$\text{len}(A) = 17 \times 8 = 136$ bits</li>
<li>$\text{len}(P) = 16 \times 8 = 128$ bits</li>
<li>$L = 0x0000000000000088 \parallel 0x0000000000000080$</li>
</ul>
</li>
<li>
<p dir="auto"><strong>Under Legacy Mistake</strong>:</p>
<ul>
<li>$\text{len}(A) = 33 \times 8 = 264$ bits</li>
<li>$\text{len}(P) = 0$ bits</li>
<li>$L = 0x0000000000000108 \parallel 0x0000000000000000$</li>
</ul>
</li>
</ol>
<h3>The Second Pitfall: Nonce IV and Invocation Counter Endianness</h3>
<p dir="auto">There is an equally critical bug that traps engineers: <strong>Initialization Vector (IV) Construction</strong>.</p>
<p dir="auto">Per Green Book Section 9.2.5.3:<br />
$$IV_{\text{CtoS}} = \text{Client System Title (8B)} \parallel \text{Client Invocation Counter (4B)}$$</p>
<p dir="auto">The Invocation Counter ($IC$) <strong>MUST be encoded in network byte order (Big-Endian)</strong>:<br />
<code>IC = 1</code> $\rightarrow$ <code>0x00 0x00 0x00 0x01</code>.<br />
If your client application passes a native x86 32-bit integer in little-endian format (<code>0x01 0x00 0x00 0x00</code>), the $J_0$ counter block derived for AES encryption ($J_0 = IV \parallel 0x00000001$) becomes completely invalid, producing a corrupted tag $T = \text{GHASH} \oplus \text{AES}_K(J_0)$.</p>
]]></description><link>https://dlms.sharur.org/post/320</link><guid isPermaLink="true">https://dlms.sharur.org/post/320</guid><dc:creator><![CDATA[alex_turner]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:07:02 GMT]]></title><description><![CDATA[<p dir="auto">Elena is spot on regarding the Green Book evolution.</p>
<p dir="auto">Let's trace the exact normative standard references:</p>
<ol>
<li>
<p dir="auto"><strong>DLMS Green Book 10th Ed Section 9.2.5.3 (Authentication in Security Suite 1)</strong>:<br />
When computing the authentication tag for <code>reply_to_HLS_authentication</code>:</p>
<ul>
<li><strong>Cipher</strong>: AES-128 in Galois/Counter Mode (GCM) per NIST SP 800-38D.</li>
<li><strong>Authentication Key ($AK$)</strong>: 128-bit symmetric key.</li>
<li><strong>Security Control ($SC$)</strong>: <code>0x10</code> (Authentication only).</li>
<li><strong>Additional Authenticated Data ($AAD$)</strong>: $SC \parallel AK$ (17 octets).</li>
<li><strong>Plaintext ($P$)</strong>: 16-octet Challenge received from peer.</li>
<li><strong>Tag Length ($T_{\text{len}}$)</strong>: 128 bits (16 octets).</li>
</ul>
</li>
<li>
<p dir="auto"><strong>DLMS Blue Book 14th Ed Section 4.5.3 (Association LN Class 15)</strong>:<br />
Method 1 <code>reply_to_HLS_authentication</code> accepts a single parameter of type <code>octet-string</code> (A-XDR tag <code>0x09 0x10</code>), which is the 16-byte GMAC tag computed by the client ($f(S_{\text{to}}C)$).</p>
</li>
<li>
<p dir="auto"><strong>Why Legacy Stacks Diverge</strong>:<br />
DLMS UA Conformance Test Tool (CTT) prior to version 3.0 had ambiguous assertions regarding whether $S_{\text{to}}C$ belonged in AAD or Plaintext for pure GMAC tags. Green Book Edition 10 explicitly settled this: all Security Control byte processing must treat the Challenge as the authenticated plaintext payload.</p>
</li>
</ol>
]]></description><link>https://dlms.sharur.org/post/319</link><guid isPermaLink="true">https://dlms.sharur.org/post/319</guid><dc:creator><![CDATA[david_miller]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Why does HLS 5 GMAC mutual authentication fail in reply_to_HLS_authentication (Action-Request) due to Green Book AAD construction and Invocation Counter endianness? on Tue, 01 Sep 2026 06:06:57 GMT]]></title><description><![CDATA[<p dir="auto">Alex, your key corruption hypothesis is almost certainly incorrect. In embedded meter firmware, if the AES keys were corrupt, the preceding <code>AARE</code> deciphering or application context validation (<code>2.16.756.5.8.1.1</code>) would have failed during association negotiation.</p>
<p dir="auto">The real issue lies in how your client constructed the <strong>Additional Authenticated Data (AAD)</strong> and payload inputs to the AES-GCM GMAC function.</p>
<p dir="auto">Look closely at how your client computed the GMAC authentication tag <code>5B 3A 8F 21 C8 91 44 E2 70 66 A3 11 9D 52 04 7A</code> in Turn 1:</p>
<h3>The Green Book AAD Evolution Trap:</h3>
<p dir="auto">In older implementations (or legacy DLMS Green Book 8th Edition drafts), some stacks constructed AAD by concatenating:<br />
$$AAD_{\text{legacy}} = \text{SecurityControl (0x10)} \parallel \text{AuthenticationKey (16B)} \parallel S_{\text{to}}C \text{ (16B)}$$<br />
with a zero-length plaintext ($P = \emptyset$).</p>
<p dir="auto">However, per <strong>DLMS Green Book 10th Ed Section 9.2.5.3 (Table 43)</strong> and <strong>IEC 62056-53 Section 8.4.2</strong>, the standard definition for HLS 5 GMAC input structure is:</p>
<ul>
<li><strong>$AAD$ (17 bytes)</strong>: $\text{SecurityControl (0x10)} \parallel \text{AuthenticationKey (16B)}$</li>
<li><strong>Plaintext / Data $P$ (16 bytes)</strong>: $S_{\text{to}}C$ (the Server Challenge)</li>
</ul>
<p dir="auto">Because GHASH processes $AAD$ and Plaintext in separate 128-bit blocks padded to 16-byte boundaries followed by the length block $(len(A) \parallel len(C))$, passing $S_{\text{to}}C$ inside AAD vs inside Plaintext yields a completely different Galois field polynomial hash, causing the meter's cryptographic coprocessor to reject the tag!</p>
]]></description><link>https://dlms.sharur.org/post/318</link><guid isPermaLink="true">https://dlms.sharur.org/post/318</guid><dc:creator><![CDATA[elena_rostova]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:06:57 GMT</pubDate></item></channel></rss>