<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">INFORMATICA</journal-id>
<journal-title-group><journal-title>Informatica</journal-title></journal-title-group>
<issn pub-type="epub">1822-8844</issn><issn pub-type="ppub">0868-4952</issn><issn-l>0868-4952</issn-l>
<publisher>
<publisher-name>Vilnius University</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">INFO1154</article-id>
<article-id pub-id-type="doi">10.15388/Informatica.2017.142</article-id>
<article-categories><subj-group subj-group-type="heading">
<subject>Research Article</subject></subj-group></article-categories>
<title-group>
<article-title>Improved Asymmetric Cipher Based on Matrix Power Function Resistant to Linear Algebra Attack</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Sakalauskas</surname><given-names>Eligijus</given-names></name><xref ref-type="aff" rid="j_info1154_aff_001"/><bio>
<p><bold>E. Sakalauskas</bold> received PhD degree from Kaunas Polytechnical Institute in 1983. Currently he is a professor in Department of Applied Mathematics in Kaunas University of Technology. The scope of scientific interests is system theory, identification and cryptography. Over 50 papers were published in these fields.</p>
<p>In recent time his research interests are focused in cryptography. Some results were obtained in the following fields: one way functions construction based on the hard problems in non-commutative algebraic structures. Using this approach two new candidate one-way functions were proposed. Two such functions were proposed: one based on matrix discrete logarithm problem together with conjugation problem and other on matrix power function. On this base several original cryptographic protocols were proposed. The main trend of investigations is concentrated on post-quantum cryptographic systems construction potentially being resistant to quantum cryptanalysis. The main research results in cryptography were published in 17 papers.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Mihalkovich</surname><given-names>Aleksejus</given-names></name><email xlink:href="aleksejus.michalkovic@ktu.lt">aleksejus.michalkovic@ktu.lt</email><xref ref-type="aff" rid="j_info1154_aff_001"/><xref ref-type="corresp" rid="cor1">∗</xref><bio>
<p><bold>A. Mihalkovich</bold> received PhD degree from Kaunas University of Technology in 2015. Currently he is a lecturer in Department of Applied Mathematics in Kaunas University of Technology. The main research interest is connected with non-commutative cryptography.</p></bio>
</contrib>
<aff id="j_info1154_aff_001">Faculty of Mathematics and Natural Sciences, Department of Applied Mathematics, <institution>Kaunas University of Technology</institution>, Studentu̧ g. 50-324, Kaunas, <country>Lithuania</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>∗</label>Corresponding author.</corresp>
</author-notes>
<pub-date pub-type="ppub"><year>2017</year></pub-date><pub-date pub-type="epub"><day>1</day><month>1</month><year>2017</year></pub-date><volume>28</volume><issue>3</issue><fpage>517</fpage><lpage>524</lpage><history><date date-type="received"><month>5</month><year>2016</year></date><date date-type="accepted"><month>8</month><year>2017</year></date></history>
<permissions><copyright-statement>© 2017 Vilnius University</copyright-statement><copyright-year>2017</copyright-year>
<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>Open access article under the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">CC BY</ext-link> license.</license-p></license></permissions>
<abstract>
<p>In this paper we consider an improved version of earlier published asymmetric encryption protocol based on matrix power function (MPF). Recently, a linear algebra attack on earlier version of this protocol was found. This attack allows an attacker to break suggested protocol in polynomial time.</p>
<p>Here we show that the improved version of our encryption protocol is not vulnerable to the declared linear attack, while retaining its effective realization in embedded systems.</p>
</abstract>
<kwd-group>
<label>Key words</label>
<kwd>cryptography</kwd>
<kwd>matrix power function</kwd>
<kwd>asymmetric encryption</kwd>
<kwd>linear algebra attack</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="j_info1154_s_001">
<label>1</label>
<title>Introduction</title>
<p>Matrix power function (MPF) was first introduced in late 2000’s. This function proved to be useful for application in symmetric and asymmetric cryptography, since all actions are performed with small integers. This means that no additional co-processors have to be used to perform actions with large elements as opposed to RSA encryption or elliptic curves cryptography. Examples of these protocols can be found in Sakalauskas and Luksys (<xref ref-type="bibr" rid="j_info1154_ref_004">2012</xref>), Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>), Mihalkovich and Sakalauskas (<xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>), Sakalauskas and Mihalkovich (<xref ref-type="bibr" rid="j_info1154_ref_005">2014</xref>). The constructed protocols belong to non-commuting cryptography, which currently is of special interest to researchers. However, to our knowledge none of the protocols of this branch have been proven to be based on candidate one-way functions relying on NP-complete problems.</p>
<p>Formally, MPF can be defined as a function of matrix <italic>Q</italic> as a parameter and matrices <inline-formula id="j_info1154_ineq_001"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$(X,Y)$]]></tex-math></alternatives></inline-formula> as function arguments parameters denoted by <inline-formula id="j_info1154_ineq_002"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${F_{Q}}(X,Y)$]]></tex-math></alternatives></inline-formula> and expressed by the formula 
<disp-formula id="j_info1154_eq_001">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {F_{Q}}(X,Y)=E\]]]></tex-math></alternatives>
</disp-formula> 
where <italic>E</italic> is a matrix representing the function value. In this paper we mainly focus on papers (Sakalauskas <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>; Mihalkovich and Sakalauskas, <xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>; Sakalauskas <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>) and (Liu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>). In the latter paper authors present an attack based on linear algebra, which can be applied to protocols, presented in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>) and Mihalkovich and Sakalauskas (<xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>) to break them in polynomial time. Our aim is to prove that the latest version of the so-called matrix power asymmetric cipher (MPAC), presented in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>), is resistant to the declared attack, thus repairing the flaw found. Also, due to provable security of the latest version of MPAC protocol, we are making a conjecture that the recovery of decryption key is a hard problem.</p>
</sec>
<sec id="j_info1154_s_002">
<label>2</label>
<title>Our Previous Work</title>
<p>Let us consider a commutative multiplicative semigroup <inline-formula id="j_info1154_ineq_003"><alternatives><mml:math>
<mml:mi mathvariant="bold-italic">S</mml:mi></mml:math><tex-math><![CDATA[$\boldsymbol{S}$]]></tex-math></alternatives></inline-formula> of multiplicative order <italic>t</italic>. Hence the powers of elements of <inline-formula id="j_info1154_ineq_004"><alternatives><mml:math>
<mml:mi mathvariant="bold-italic">S</mml:mi></mml:math><tex-math><![CDATA[$\boldsymbol{S}$]]></tex-math></alternatives></inline-formula> can be defined in a commutative numeric ring <inline-formula id="j_info1154_ineq_005"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{t}}$]]></tex-math></alternatives></inline-formula>, where addition and multiplication are defined modulo <italic>t</italic>. Previously in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>) we defined this group as Sylow subgroup <inline-formula id="j_info1154_ineq_006"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">⊂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}}\subset {\boldsymbol{Z}_{n}}$]]></tex-math></alternatives></inline-formula> of prime multiplicative order <italic>p</italic> combined with an ideal <inline-formula id="j_info1154_ineq_007"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{J}_{p,n}}$]]></tex-math></alternatives></inline-formula> given by <inline-formula id="j_info1154_ineq_008"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">j</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{J}_{p,n}}=j{\boldsymbol{\Gamma }_{p,n}}$]]></tex-math></alternatives></inline-formula>, where <italic>j</italic> is an idempotent of the semigroup <inline-formula id="j_info1154_ineq_009"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>. Due to prime multiplicative order <italic>p</italic> of the platform semigroup <inline-formula id="j_info1154_ineq_010"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">♯</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>∪</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}^{\mathrm{\sharp }}}={\boldsymbol{\Gamma }_{p,n}}\cup {\boldsymbol{J}_{p,n}}$]]></tex-math></alternatives></inline-formula>, all the powers of elements of this algebraic structure are contained in a power field <inline-formula id="j_info1154_ineq_011"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>.</p>
<p>We construct a semigroup of square <inline-formula id="j_info1154_ineq_012"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi></mml:math><tex-math><![CDATA[$m\times m$]]></tex-math></alternatives></inline-formula> matrices with entries defined in semigroup <inline-formula id="j_info1154_ineq_013"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}}$]]></tex-math></alternatives></inline-formula> and denote it by <inline-formula id="j_info1154_ineq_014"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{M}_{{\boldsymbol{\Gamma }_{p,n}}}}$]]></tex-math></alternatives></inline-formula>. Analogously we construct a ring of square <inline-formula id="j_info1154_ineq_015"><alternatives><mml:math>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi></mml:math><tex-math><![CDATA[$m\times m$]]></tex-math></alternatives></inline-formula> matrices <inline-formula id="j_info1154_ineq_016"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{M}_{{\boldsymbol{Z}_{n}}}}$]]></tex-math></alternatives></inline-formula> with entries of these matrices defined in numerical field <inline-formula id="j_info1154_ineq_017"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>.</p>
<p>The two-sided MPF (or MPF for short) for a fixed parameter matrix <inline-formula id="j_info1154_ineq_018"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{M}_{{\boldsymbol{\Gamma }_{p,n}}}}$]]></tex-math></alternatives></inline-formula> is denoted as follows: 
<disp-formula id="j_info1154_eq_002">
<label>(1)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">E</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {^{X}}{Q^{Y}}=E,\]]]></tex-math></alternatives>
</disp-formula> 
where matrices <inline-formula id="j_info1154_ineq_019"><alternatives><mml:math>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">}</mml:mo></mml:math><tex-math><![CDATA[$X=\{{x_{ij}}\}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_020"><alternatives><mml:math>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">}</mml:mo></mml:math><tex-math><![CDATA[$Y=\{{y_{ij}}\}$]]></tex-math></alternatives></inline-formula> are defined in a power ring <inline-formula id="j_info1154_ineq_021"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula> and matrix <inline-formula id="j_info1154_ineq_022"><alternatives><mml:math>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">}</mml:mo></mml:math><tex-math><![CDATA[$Q=\{{q_{ij}}\}$]]></tex-math></alternatives></inline-formula> is defined in a platform semigroup <inline-formula id="j_info1154_ineq_023"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{M}_{{\boldsymbol{\Gamma }_{p,n}}}}$]]></tex-math></alternatives></inline-formula>. The entries of matrix <inline-formula id="j_info1154_ineq_024"><alternatives><mml:math>
<mml:mi mathvariant="italic">e</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo fence="true" stretchy="false">{</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">}</mml:mo></mml:math><tex-math><![CDATA[$e=\{{e_{ij}}\}$]]></tex-math></alternatives></inline-formula> are calculated in the following way: 
<disp-formula id="j_info1154_eq_003">
<label>(2)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∏</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∏</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">k</mml:mi>
<mml:mi mathvariant="italic">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:mi mathvariant="italic">j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {e_{ij}}={\prod \limits_{k=1}^{m}}{\prod \limits_{l=1}^{m}}{q_{kl}^{{x_{ik}}{y_{lj}}}}.\]]]></tex-math></alternatives>
</disp-formula>
</p>
<p>We will refer to matrices <italic>X</italic> and <italic>Y</italic> as <italic>matrix powers</italic> or <italic>power matrices</italic>, <italic>Q</italic> as <italic>a base matrix</italic> and <italic>E</italic> as <italic>a matrix power value</italic>.</p>
<p>The following main properties of MPF were presented and proven in Sakalauskas and Luksys (<xref ref-type="bibr" rid="j_info1154_ref_004">2012</xref>): <disp-formula-group id="j_info1154_dg_001">
<disp-formula id="j_info1154_eq_004">
<label>(3)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {\big({^{X}}Q\big)^{Y}}={^{X}}\big({Q^{Y}}\big)={^{X}}{Q^{Y}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1154_eq_005">
<label>(4)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {^{X}}{\big({^{U}}{Q^{V}}\big)^{Y}}={^{(XU)}}{Q^{(VY)}}={^{XU}}{Q^{VY}}.\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p>
<p>The idea of using MPF to perform asymmetric key exchange was initially proposed in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>). The suggested protocol resembles a famous approach of Diffie and Hellman (<xref ref-type="bibr" rid="j_info1154_ref_001">1976</xref>).</p>
<p>According to the initial idea, two protocol parties, called Alice and Bob, agree on the public platform semigroup <inline-formula id="j_info1154_ineq_025"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula> hence implying the power ring <inline-formula id="j_info1154_ineq_026"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p-1}}$]]></tex-math></alternatives></inline-formula>. Both parties also agree on two sets of commuting matrices <inline-formula id="j_info1154_ineq_027"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo>
<mml:mo stretchy="false">⊂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$\langle L\rangle \subset {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_028"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo>
<mml:mo stretchy="false">⊂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$\langle R\rangle \subset {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula> generated by matrices <italic>L</italic> and <italic>R</italic> respectively. Furthermore the base matrix <inline-formula id="j_info1154_ineq_029"><alternatives><mml:math>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$Q\in {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula> is generated and published online.</p>
<p>To perform asymmetric key exchange Alice and Bob select their private keys – pairs of matrices <inline-formula id="j_info1154_ineq_030"><alternatives><mml:math>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo></mml:math><tex-math><![CDATA[$X\in \langle L\rangle ,Y\in \langle R\rangle $]]></tex-math></alternatives></inline-formula> for Alice and <inline-formula id="j_info1154_ineq_031"><alternatives><mml:math>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo fence="true" stretchy="false">⟩</mml:mo></mml:math><tex-math><![CDATA[$U\in \langle L\rangle ,V\in \langle R\rangle $]]></tex-math></alternatives></inline-formula> for Bob. Their public keys are obtained using MPF, i.e. <inline-formula id="j_info1154_ineq_032"><alternatives><mml:math>
<mml:mi mathvariant="italic">A</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mo>=</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[$A{=^{X}}{Q^{Y}}$]]></tex-math></alternatives></inline-formula> for Alice and <inline-formula id="j_info1154_ineq_033"><alternatives><mml:math>
<mml:mi mathvariant="italic">B</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mo>=</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[$B{=^{U}}{Q^{V}}$]]></tex-math></alternatives></inline-formula> for Bob. Hence we have: 
<disp-formula id="j_info1154_eq_006">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PrK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="2em"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PuK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">A</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PrK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="2em"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PuK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">B</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{array}{l}\displaystyle {\mathit{PrK}_{A}}=(X,Y),\hspace{2em}{\mathit{PuK}_{A}}=A,\\ {} \displaystyle {\mathit{PrK}_{B}}=(U,V),\hspace{2em}{\mathit{PuK}_{B}}=B,\end{array}\]]]></tex-math></alternatives>
</disp-formula> 
where <inline-formula id="j_info1154_ineq_034"><alternatives><mml:math>
<mml:mi mathvariant="italic">PrK</mml:mi></mml:math><tex-math><![CDATA[$\mathit{PrK}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_035"><alternatives><mml:math>
<mml:mi mathvariant="italic">PuK</mml:mi></mml:math><tex-math><![CDATA[$\mathit{PuK}$]]></tex-math></alternatives></inline-formula> denote private and public key respectively.</p>
<p>Upon exchanging their public keys, Alice and Bob can agree on a common key <italic>K</italic> calculated as follows: 
<disp-formula id="j_info1154_eq_007">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ K={^{X}}{B^{Y}}={^{(XU)}}{Q^{(VY)}}={^{(UX)}}{Q^{(YV)}}={^{U}}{A^{V}},\]]]></tex-math></alternatives>
</disp-formula> 
since matrices <italic>X</italic>, <italic>U</italic> and <italic>Y</italic>, <italic>V</italic> commute.</p>
<p>However, it is shown in Liu <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>), that this asymmetric key exchange is vulnerable to a certain linear algebra attack. Furthermore, their idea also holds in case of asymmetric encryption proposed in Mihalkovich and Sakalauskas (<xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>).</p>
<p>We now recall an improved version of MPAC presented in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>).</p>
<p>Alice and Bob agree on the public platform semigroup <inline-formula id="j_info1154_ineq_036"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">♯</mml:mi>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}^{\mathrm{\sharp }}}$]]></tex-math></alternatives></inline-formula> hence implying the power field <inline-formula id="j_info1154_ineq_037"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>. Furthermore, the base matrix <inline-formula id="j_info1154_ineq_038"><alternatives><mml:math>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$Q\in {\boldsymbol{M}_{{\boldsymbol{\Gamma }_{p,n}}}}$]]></tex-math></alternatives></inline-formula>, as well as two non-commuting power matrices <inline-formula id="j_info1154_ineq_039"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Z_{1}},{Z_{2}}\in {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula>, are generated and published publicly for both parties to use.</p>
<p>To perform MPAC protocol Alice generates her private and public data using the following steps: 
<list>
<list-item id="j_info1154_li_001">
<label>•</label>
<p>She randomly selects non-singular secret matrix <inline-formula id="j_info1154_ineq_040"><alternatives><mml:math>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$X\in {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_002">
<label>•</label>
<p>Alice selects a random function <inline-formula id="j_info1154_ineq_041"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$u({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula>, where variables are non-commuting and coefficients are in <inline-formula id="j_info1154_ineq_042"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>. Using this function Alice calculates matrix <inline-formula id="j_info1154_ineq_043"><alternatives><mml:math>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$U=u({Z_{1}},{Z_{2}})$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_003">
<label>•</label>
<p>She computes matrices <inline-formula id="j_info1154_ineq_044"><alternatives><mml:math>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$X{Z_{1}}{X^{-1}}={A_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_045"><alternatives><mml:math>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$X{Z_{2}}{X^{-1}}={A_{2}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_046"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">E</mml:mi></mml:math><tex-math><![CDATA[${^{X}}{Q^{U}}=E$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
</list> 
Hence Alice obtained her data: a private key <inline-formula id="j_info1154_ineq_047"><alternatives><mml:math>
<mml:mi mathvariant="italic">P</mml:mi>
<mml:mi mathvariant="italic">r</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$Pr{K_{A}}=(X,u({x_{1}},{x_{2}}))$]]></tex-math></alternatives></inline-formula>, which she keeps a secret, and a public key <inline-formula id="j_info1154_ineq_048"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PuK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">E</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${\mathit{PuK}_{A}}=({A_{1}},{A_{2}},E)$]]></tex-math></alternatives></inline-formula>, which is certificated and published online.</p>
<p>To encrypt a secret message <italic>M</italic> Bob takes Alice’s public key <inline-formula id="j_info1154_ineq_049"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">PuK</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\mathit{PuK}_{A}}$]]></tex-math></alternatives></inline-formula> and performs the following actions:</p>
<list>
<list-item id="j_info1154_li_004">
<label>1.</label>
<p>Bob chooses randomly a non-singular matrix <inline-formula id="j_info1154_ineq_050"><alternatives><mml:math>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo stretchy="false">∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$Y\in {\boldsymbol{M}_{{\boldsymbol{Z}_{p}}}}$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_005">
<label>2.</label>
<p>He selects a random function <inline-formula id="j_info1154_ineq_051"><alternatives><mml:math>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$v({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula>, where variables are non-commuting and coefficients are in <inline-formula id="j_info1154_ineq_052"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${\boldsymbol{Z}_{p}}$]]></tex-math></alternatives></inline-formula>. Using this function he calculates matrix <inline-formula id="j_info1154_ineq_053"><alternatives><mml:math>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$V=v({Z_{1}},{Z_{2}})$]]></tex-math></alternatives></inline-formula>. Then Bob takes matrices <inline-formula id="j_info1154_ineq_054"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${A_{1}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_055"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${A_{2}}$]]></tex-math></alternatives></inline-formula> and computes a matrix <inline-formula id="j_info1154_ineq_056"><alternatives><mml:math>
<mml:mi mathvariant="italic">W</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[$W=v({A_{1}},{A_{2}})=Xv({Z_{1}},{Z_{2}}){X^{-1}}=XV{X^{-1}}$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_006">
<label>3.</label>
<p>He raises matrix <inline-formula id="j_info1154_ineq_057"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${^{X}}{Q^{U}}$]]></tex-math></alternatives></inline-formula> to the obtained power matrix <italic>W</italic> on the left and obtains <inline-formula id="j_info1154_ineq_058"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${^{XV}}{Q^{U}}$]]></tex-math></alternatives></inline-formula> since <inline-formula id="j_info1154_ineq_059"><alternatives><mml:math>
<mml:mi mathvariant="italic">W</mml:mi>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi></mml:math><tex-math><![CDATA[$WX=XV$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_007">
<label>4.</label>
<p>He raises the result matrix to the power matrix <italic>Y</italic> on the right and obtains <inline-formula id="j_info1154_ineq_060"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${^{XV}}{Q^{UY}}$]]></tex-math></alternatives></inline-formula> = <italic>K</italic>, which can then be converted to a bit string;</p>
</list-item>
<list-item id="j_info1154_li_008">
<label>5.</label>
<p>Bob computes the ciphertext <italic>C</italic> = <inline-formula id="j_info1154_ineq_061"><alternatives><mml:math>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>⊕</mml:mo>
<mml:mi mathvariant="italic">M</mml:mi></mml:math><tex-math><![CDATA[$K\oplus M$]]></tex-math></alternatives></inline-formula>, where ⊕ is bitwise sum modulo 2 of all entries of bit stings <italic>K</italic> and <italic>M</italic>;</p>
</list-item>
<list-item id="j_info1154_li_009">
<label>6.</label>
<p>Bob computes three matrices <inline-formula id="j_info1154_ineq_062"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$({Y^{-1}}{Z_{1}}Y={B_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_063"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Y^{-1}}{Z_{2}}Y={B_{2}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_064"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">F</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${^{V}}{Q^{Y}}=F)$]]></tex-math></alternatives></inline-formula> which we denote by encryptor <italic>ε</italic> and sends it to Alice together with <italic>C</italic>.</p>
</list-item>
</list>
<p>Upon receiving the encryptor <italic>ε</italic> Alice performs the following actions to decrypt Bob’s message:</p>
<list>
<list-item id="j_info1154_li_010">
<label>1.</label>
<p>She uses matrices <inline-formula id="j_info1154_ineq_065"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${B_{1}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_066"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${B_{2}}$]]></tex-math></alternatives></inline-formula> and her secret function <inline-formula id="j_info1154_ineq_067"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$u({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula> to compute <inline-formula id="j_info1154_ineq_068"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi></mml:math><tex-math><![CDATA[$u({B_{1}},{B_{2}})={Y^{-1}}UY$]]></tex-math></alternatives></inline-formula>;</p>
</list-item>
<list-item id="j_info1154_li_011">
<label>2.</label>
<p>Alice raises matrix <inline-formula id="j_info1154_ineq_069"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${^{V}}{Q^{Y}}$]]></tex-math></alternatives></inline-formula> to the power <inline-formula id="j_info1154_ineq_070"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi></mml:math><tex-math><![CDATA[${Y^{-1}}UY$]]></tex-math></alternatives></inline-formula> on the right and then raises the result matrix to the power <italic>X</italic> on the left and hence obtains a matrix <inline-formula id="j_info1154_ineq_071"><alternatives><mml:math>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[$K={^{XV}}{Q^{UY}}$]]></tex-math></alternatives></inline-formula> and converts it to a bitstring;</p>
</list-item>
<list-item id="j_info1154_li_012">
<label>3.</label>
<p>Alice can now decrypt a ciphertext <italic>C</italic> using encryption key <italic>K</italic> and relation 
<disp-formula id="j_info1154_eq_008">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:mi mathvariant="italic">M</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>⊕</mml:mo>
<mml:mi mathvariant="italic">C</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>⊕</mml:mo>
<mml:mi mathvariant="italic">K</mml:mi>
<mml:mo>⊕</mml:mo>
<mml:mi mathvariant="italic">M</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ M=K\oplus C=K\oplus K\oplus M.\]]]></tex-math></alternatives>
</disp-formula>
</p>
</list-item>
</list>
<p>The essential modification of the protocol suggested in Mihalkovich and Sakalauskas (<xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>) is an extra matrix <inline-formula id="j_info1154_ineq_072"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Z_{2}}$]]></tex-math></alternatives></inline-formula>, which is published as a public parameter. In the next section we will show that this improvement of the initial protocol is enough to protect secret key from linear algebra cryptanalysis.</p>
</sec>
<sec id="j_info1154_s_003">
<label>3</label>
<title>The Analysis Linear Algebra Attack</title>
<p>Let us briefly recall the attack presented in Liu <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>).</p>
<p>To break the asymmetric key exchange proposed in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>) an attacker has to solve the following system of equations: 
<disp-formula id="j_info1154_eq_009">
<label>(5)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable equalrows="false" equalcolumns="false" columnalign="left">
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">A</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \left\{\begin{array}{l}{^{X}}{Q^{Y}}=A,\\ {} XL=LX,\\ {} YR=RY,\end{array}\right.\]]]></tex-math></alternatives>
</disp-formula> 
where matrices <italic>Q</italic>, <italic>L</italic>, <italic>R</italic>, <italic>A</italic> are publicly known. Using convenient discrete logarithm function this system can be transformed to the following system: 
<disp-formula id="j_info1154_eq_010">
<label>(6)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable equalrows="false" equalcolumns="false" columnalign="left">
<mml:mtr>
<mml:mtd class="array">
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">g</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">g</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">A</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">L</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">R</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \left\{\begin{array}{l}(l{d_{g}}Q)Y={X^{-1}}l{d_{g}}A,\\ {} {X^{-1}}L=L{X^{-1}},\\ {} YR=RY.\end{array}\right.\]]]></tex-math></alternatives>
</disp-formula> 
The latter system can be solved in polynomial time if at least one of matrices <italic>X</italic>, <italic>Y</italic> has an inverse. The algorithm for solving system (<xref rid="j_info1154_eq_010">6</xref>) uses Kronecker product of matrices and stacking matrices <italic>X</italic>, <italic>Y</italic> into one long vector. Hence an extra restriction on private matrices has to be added. Namely, matrices <italic>X</italic>, <italic>Y</italic>, <italic>U</italic>, <italic>V</italic> have to be singular.</p>
<p>Another way to avoid revealing of private keys in protocol (Sakalauskas <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1154_ref_006">2008</xref>) is to escape the discrete logarithm transformation of system (<xref rid="j_info1154_eq_009">5</xref>). Hence the choice of the platform semigroup is vital to keep the protocol secure. As of now the platform group <inline-formula id="j_info1154_ineq_073"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">♯</mml:mi>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}^{\mathrm{\sharp }}}$]]></tex-math></alternatives></inline-formula> seems to be a safe choice to avoid linear algebra attack since, in general, there is no common generator of this semigroup, nor is this semigroup isomorphic to the Cartesian or free product of several cyclic semigroups. For more information on this semigroup the reader can turn to Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>), where the security of MPAC is considered.</p>
<p>In their paper (Liu <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>) have also suggested an idea of using non-commuting (semi)group to define a platform structure, i.e. the entries of base matrix <italic>Q</italic> should not commute. While this idea is interesting, it has to be thoroughly studied.</p>
<p>Furthermore, in Mihalkovich and Sakalauskas (<xref ref-type="bibr" rid="j_info1154_ref_003">2012</xref>) we presented an asymmetric encryption protocol, which unfortunately is not resistant to linear algebra attack described in Liu <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>). The key-point of this attack is eliminating matrix <italic>U</italic> by replacing it with its polynomial expression. Hence the following system of equations has to be solved: 
<disp-formula id="j_info1154_eq_011">
<label>(7)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable equalrows="false" equalcolumns="false" columnalign="left">
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">Z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">A</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mi mathvariant="italic">Z</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mi mathvariant="italic">B</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">g</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Q</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mo largeop="false" movablelimits="false">∑</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:munderover>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">l</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">g</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">E</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \left\{\begin{array}{l}Z{X^{-1}}={X^{-1}}A,\\ {} ZY=YB,\\ {} (l{d_{g}}Q)\cdot {\textstyle\sum \limits_{i=0}^{m-1}}{a_{i}}{Z^{i}}={X^{-1}}\cdot (l{d_{g}}E).\end{array}\right.\]]]></tex-math></alternatives>
</disp-formula>
</p>
<p>The authors of the attack have shown that this can be done in polynomial time.</p>
<p>However, in Sakalauskas and Mihalkovich (<xref ref-type="bibr" rid="j_info1154_ref_005">2014</xref>) and Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>) we have improved our protocol by choosing a safer platform semigroup and adding an extra public parameter, namely a power matrix <inline-formula id="j_info1154_ineq_074"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Z_{2}}$]]></tex-math></alternatives></inline-formula>. The latter improvement is useful since the matrix <italic>U</italic> can now be calculated using an abstract random function <inline-formula id="j_info1154_ineq_075"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$u({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula>. This comes from the structure of public data, namely matrices <inline-formula id="j_info1154_ineq_076"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${A_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_077"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${A_{2}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_078"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${B_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_079"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${B_{2}}$]]></tex-math></alternatives></inline-formula> of both parties of the protocol, since 
<disp-formula id="j_info1154_eq_012">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">X</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{array}{l}\displaystyle X{Z_{1}}{X^{-1}}={A_{1}},X{Z_{2}}{X^{-1}}={A_{2}},\\ {} \displaystyle {Y^{-1}}{Z_{1}}Y={B_{1}},{Y^{-1}}{Z_{2}}Y={B_{2}}\end{array}\]]]></tex-math></alternatives>
</disp-formula> 
and hence 
<disp-formula id="j_info1154_eq_013">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="italic">U</mml:mi>
<mml:mi mathvariant="italic">Y</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">X</mml:mi>
<mml:mi mathvariant="italic">V</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[\begin{array}{l}\displaystyle u({B_{1}},{B_{2}})={Y^{-1}}u({Z_{1}},{Z_{2}})Y={Y^{-1}}UY,\\ {} \displaystyle v({A_{1}},{A_{2}})=Xv({Z_{1}},{Z_{2}}){X^{-1}}=XV{X^{-1}}\end{array}\]]]></tex-math></alternatives>
</disp-formula> 
regardless of functions <inline-formula id="j_info1154_ineq_080"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$u({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_081"><alternatives><mml:math>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$v({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula> respectively. An important moment here is the arbitrary structure of these private functions, i.e. these functions can be obtained using any combination of additions and multiplications of scalar non-commuting variables <inline-formula id="j_info1154_ineq_082"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1154_ineq_083"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{2}}$]]></tex-math></alternatives></inline-formula>. For more clarity let us present several examples of these functions: 
<disp-formula id="j_info1154_eq_014">
<alternatives><mml:math display="block">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>;</mml:mo>
<mml:mspace width="2.5pt"/>
<mml:mn>3</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>;</mml:mo>
<mml:mspace width="2.5pt"/>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:mn>3</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">(</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo maxsize="1.19em" minsize="1.19em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ {x_{1}}{x_{2}}+2{x_{2}}{x_{1}};\hspace{2.5pt}3{x_{1}}{x_{2}}{x_{1}}+{x_{1}}+2{x_{2}}+{x_{2}}{x_{1}};\hspace{2.5pt}\big({x_{1}^{2}}+3{x_{1}}+2\big)\big({x_{2}^{3}}-2{x_{2}^{2}}-1\big).\]]]></tex-math></alternatives>
</disp-formula> 
As we can see the exact expressions of private functions are limited only by imagination of Alice and Bob and play no part in the execution of the MPAC protocol. However, on the attacker’s side this unknown structure of private functions is an obstacle, which keeps him from eliminating matrix <italic>U</italic>. Furthermore, the length of coefficients vector in now unbounded since the space of all possible private functions is infinite, i.e. functions like <inline-formula id="j_info1154_ineq_084"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{1}}{x_{2}}{x_{1}},{x_{2}}{x_{1}}{x_{2}},{x_{1}}{x_{2}^{2}}{x_{1}^{3}}{x_{2}^{4}}{x_{1}}$]]></tex-math></alternatives></inline-formula> as well as their combinations are a legitimate choice.</p>
<p>Note that the suggestion of using singular matrices <italic>X</italic>, <italic>Y</italic>, <italic>U</italic>, <italic>V</italic> as private key is not valid in case of MPAC protocol due to conjugation constrains, i.e. matrices <italic>X</italic> and <italic>Y</italic> have to be invertible. Hence the security of MPAC protocol now relies on the correct choice of platform semigroup and the unknown structure of the private functions <inline-formula id="j_info1154_ineq_085"><alternatives><mml:math>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$u({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1154_ineq_086"><alternatives><mml:math>
<mml:mi mathvariant="italic">v</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$v({x_{1}},{x_{2}})$]]></tex-math></alternatives></inline-formula> respectively.</p>
</sec>
<sec id="j_info1154_s_004">
<label>4</label>
<title>Conclusions</title>
<p>In our paper we presented an analysis of a certain attack suggested in Liu <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_002">2016</xref>). While avoidance of this attack for asymmetric key exchange was suggested by authors themselves, the case of asymmetric encryption is more complicated. The essence of linear algebra attack on the early version of MPAC is elimination of the private matrix <italic>U</italic> due to its polynomial structure, which is publicly known.</p>
<p>We also analysed the resistance to this attack of improved version of Matrix Power Asymmetric Cipher (MPAC) suggested in Sakalauskas <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1154_ref_007">2017</xref>). Based on performed analysis we can see that the security of this protocol relies on the following facts:</p>
<list>
<list-item id="j_info1154_li_013">
<label>•</label>
<p>An attacker has to solve the so-called MPF problem with conjugation constraints;</p>
</list-item>
<list-item id="j_info1154_li_014">
<label>•</label>
<p>By choosing a platform semigroup <inline-formula id="j_info1154_ineq_087"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">Γ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">p</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">♯</mml:mi>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${\boldsymbol{\Gamma }_{p,n}^{\mathrm{\sharp }}}$]]></tex-math></alternatives></inline-formula> the transformation of MPF problem using discrete logarithm function can be avoided;</p>
</list-item>
<list-item id="j_info1154_li_015">
<label>•</label>
<p>By adding an extra matrix <inline-formula id="j_info1154_ineq_088"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Z_{2}}$]]></tex-math></alternatives></inline-formula> as a public parameter matrices <italic>U</italic> and <italic>V</italic> can be calculated using arbitrary random functions. The space of these functions is unbounded.</p>
</list-item>
</list>
<p>So far we do not know the methods of the solution of systems defined by initial MPF equations, since they are not custom systems of algebraic equations. It is rather a system of power equations, where unknown variables are the powers of certain elements in semigroup. Furthermore, the unknown structure of private function is an extra factor, which has to be considered as well.</p>
</sec>
</body>
<back>
<ref-list id="j_info1154_reflist_001">
<title>References</title>
<ref id="j_info1154_ref_001">
<mixed-citation publication-type="journal"><string-name><surname>Diffie</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Hellman</surname>, <given-names>M.</given-names></string-name> (<year>1976</year>). <article-title>New directions in cryptography</article-title>. <source>IEEE Transactions on Information Theory</source>, <volume>22</volume>(<issue>6</issue>), <fpage>644</fpage>–<lpage>654</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_002">
<mixed-citation publication-type="chapter"><string-name><surname>Liu</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Jia</surname>, <given-names>J.</given-names></string-name> (<year>2016</year>). <chapter-title>A linear algebra attack on the non-commuting cryptography class based on matrix power function</chapter-title>. In: <source>International Conference on Information Security and Cryptology</source>. <publisher-name>Springer</publisher-name>, <publisher-loc>Cham</publisher-loc>, pp. <fpage>343</fpage>–<lpage>354</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_003">
<mixed-citation publication-type="chapter"><string-name><surname>Mihalkovich</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Sakalauskas</surname>, <given-names>E.</given-names></string-name> (<year>2012</year>). <chapter-title>Asymmetric cipher based on MPF and its security parameters evaluation</chapter-title>. In: <source>Proceedings of the Lithuanian Mathematical Society, Ser. A</source>, Vol. <volume>53</volume>, pp. <fpage>72</fpage>–<lpage>77</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_004">
<mixed-citation publication-type="journal"><string-name><surname>Sakalauskas</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Luksys</surname>, <given-names>K.</given-names></string-name> (<year>2012</year>). <article-title>Matrix power function and its application to block cipher <italic>s</italic>-box construction</article-title>. <source>International Journal of Innovative Computing</source>, <volume>8</volume>(<issue>4</issue>), <fpage>2655</fpage>–<lpage>2664</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_005">
<mixed-citation publication-type="journal"><string-name><surname>Sakalauskas</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Mihalkovich</surname>, <given-names>A.</given-names></string-name> (<year>2014</year>). <article-title>New asymmetric cipher of non-commuting cryptography class based on matrix power function</article-title>. <source>Informatica</source>, <volume>25</volume>(<issue>2</issue>), <fpage>283</fpage>–<lpage>298</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_006">
<mixed-citation publication-type="chapter"><string-name><surname>Sakalauskas</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Listopadskis</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Tvarijonas</surname>, <given-names>P.</given-names></string-name> (<year>2008</year>). <chapter-title>Key agreement protocol (KAP) based on matrix power function</chapter-title>. In: <source>Advanced Studies in Software and Knowledge Engineering. Institute of Information Theories and Applications FOI ITHEA</source>, pp. <fpage>92</fpage>–<lpage>96</lpage>.</mixed-citation>
</ref>
<ref id="j_info1154_ref_007">
<mixed-citation publication-type="journal"><string-name><surname>Sakalauskas</surname>, <given-names>E.</given-names></string-name>, <string-name><surname>Mihalkovich</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Venčkauskas</surname>, <given-names>A.</given-names></string-name> (<year>2017</year>). <article-title>Improved asymmetric cipher based on matrix power function with provable security</article-title>. <source>Symmetry</source>, <volume>9</volume>(<issue>1</issue>), <fpage>9</fpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.3390/sym9010009" xlink:type="simple">https://doi.org/10.3390/sym9010009</ext-link>.</mixed-citation>
</ref>
</ref-list>
</back>
</article>