diff --git a/docs/manpages/ndnsec-unlock-tpm.rst b/docs/manpages/ndnsec-unlock-tpm.rst
index 5e18108..858f0b6 100644
--- a/docs/manpages/ndnsec-unlock-tpm.rst
+++ b/docs/manpages/ndnsec-unlock-tpm.rst
@@ -9,5 +9,7 @@
 Description
 -----------
 
+**DEPRECATED**
+
 This command can be used to (temporarily) unlock the local
 **Trusted Platform Module (TPM)** that manages the private keys.
diff --git a/docs/manpages/ndnsec.rst b/docs/manpages/ndnsec.rst
index edf948a..6f2064a 100644
--- a/docs/manpages/ndnsec.rst
+++ b/docs/manpages/ndnsec.rst
@@ -56,9 +56,6 @@
 :doc:`import <ndnsec-import>`
   Import an identity from a SafeBag.
 
-:doc:`unlock-tpm <ndnsec-unlock-tpm>`
-  Unlock the TPM.
-
 Exit Status
 -----------
 
diff --git a/ndn-cxx/security/tpm/back-end.cpp b/ndn-cxx/security/tpm/back-end.cpp
index d336b0b..ab374e6 100644
--- a/ndn-cxx/security/tpm/back-end.cpp
+++ b/ndn-cxx/security/tpm/back-end.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -145,27 +145,4 @@
   return Name(identity).append(name::Component(key.getKeyDigest(DigestAlgorithm::SHA256)));
 }
 
-bool
-BackEnd::isTerminalMode() const
-{
-  return true;
-}
-
-void
-BackEnd::setTerminalMode(bool isTerminal) const
-{
-}
-
-bool
-BackEnd::isTpmLocked() const
-{
-  return false;
-}
-
-bool
-BackEnd::unlockTpm(const char* pw, size_t pwLen) const
-{
-  return !isTpmLocked();
-}
-
 } // namespace ndn::security::tpm
diff --git a/ndn-cxx/security/tpm/back-end.hpp b/ndn-cxx/security/tpm/back-end.hpp
index b66d267..e83580b 100644
--- a/ndn-cxx/security/tpm/back-end.hpp
+++ b/ndn-cxx/security/tpm/back-end.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -116,45 +116,59 @@
 
   /**
    * @brief Check if the TPM is in terminal mode.
+   * @deprecated
    *
    * The default implementation always returns true.
-   *
-   * @return True if in terminal mode, false otherwise.
    */
+  [[deprecated]]
   virtual bool
-  isTerminalMode() const;
+  isTerminalMode() const
+  {
+    return true;
+  }
 
   /**
    * @brief Set the terminal mode of the TPM.
+   * @deprecated
    *
    * In terminal mode, the TPM will not ask for a password from the GUI.
    * The default implementation does nothing.
    */
+  [[deprecated]]
   virtual void
-  setTerminalMode(bool isTerminal) const;
+  setTerminalMode(bool isTerminal) const
+  {
+  }
 
   /**
    * @brief Check if the TPM is locked.
+   * @deprecated
    *
    * The default implementation always returns false.
-   *
-   * @return True if locked, false otherwise.
    */
+  [[deprecated]]
   virtual bool
-  isTpmLocked() const;
+  isTpmLocked() const
+  {
+    return false;
+  }
 
   /**
    * @brief Unlock the TPM.
+   * @deprecated
    *
-   * The default implementation does nothing and returns `!isTpmLocked()`.
+   * The default implementation does nothing and always returns true.
    *
    * @param pw The password to unlock the TPM.
    * @param pwLen The length of the password.
-   *
    * @return True if the TPM was unlocked.
    */
+  [[deprecated]]
   [[nodiscard]] virtual bool
-  unlockTpm(const char* pw, size_t pwLen) const;
+  unlockTpm(const char* pw, size_t pwLen) const
+  {
+    return true;
+  }
 
 protected: // helper methods
   /**
diff --git a/ndn-cxx/security/tpm/impl/back-end-osx.cpp b/ndn-cxx/security/tpm/impl/back-end-osx.cpp
index 0567655..f94494c 100644
--- a/ndn-cxx/security/tpm/impl/back-end-osx.cpp
+++ b/ndn-cxx/security/tpm/impl/back-end-osx.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -38,11 +38,9 @@
 namespace cfstring = ndn::detail::cfstring;
 using ndn::detail::CFReleaser;
 
-class BackEndOsx::Impl
+struct BackEndOsx::Impl
 {
-public:
   SecKeychainRef keyChainRef;
-  bool isTerminalMode = false;
 };
 
 static CFReleaser<CFDataRef>
@@ -187,8 +185,6 @@
 BackEndOsx::BackEndOsx(const std::string&)
   : m_impl(make_unique<Impl>())
 {
-  SecKeychainSetUserInteractionAllowed(!m_impl->isTerminalMode);
-
   OSStatus res = SecKeychainCopyDefault(&m_impl->keyChainRef);
   if (res == errSecNoDefaultKeychain) {
     NDN_THROW(Error("No default keychain, create one first"));
@@ -204,49 +200,6 @@
   return scheme;
 }
 
-bool
-BackEndOsx::isTerminalMode() const
-{
-  return m_impl->isTerminalMode;
-}
-
-void
-BackEndOsx::setTerminalMode(bool isTerminal) const
-{
-  m_impl->isTerminalMode = isTerminal;
-  SecKeychainSetUserInteractionAllowed(!isTerminal);
-}
-
-bool
-BackEndOsx::isTpmLocked() const
-{
-  SecKeychainStatus keychainStatus;
-  OSStatus res = SecKeychainGetStatus(m_impl->keyChainRef, &keychainStatus);
-  if (res != errSecSuccess)
-    return true;
-  else
-    return (kSecUnlockStateStatus & keychainStatus) == 0;
-}
-
-bool
-BackEndOsx::unlockTpm(const char* pw, size_t pwLen) const
-{
-  // If the default key chain is already unlocked, return immediately.
-  if (!isTpmLocked())
-    return true;
-
-  if (m_impl->isTerminalMode) {
-    // Use the supplied password.
-    SecKeychainUnlock(m_impl->keyChainRef, pwLen, pw, true);
-  }
-  else {
-    // If inTerminal is not set, get the password from GUI.
-    SecKeychainUnlock(m_impl->keyChainRef, 0, nullptr, false);
-  }
-
-  return !isTpmLocked();
-}
-
 ConstBufferPtr
 BackEndOsx::sign(const KeyRefOsx& key, DigestAlgorithm digestAlgo, const InputBuffers& bufs)
 {
diff --git a/ndn-cxx/security/tpm/impl/back-end-osx.hpp b/ndn-cxx/security/tpm/impl/back-end-osx.hpp
index 706bca4..143abb9 100644
--- a/ndn-cxx/security/tpm/impl/back-end-osx.hpp
+++ b/ndn-cxx/security/tpm/impl/back-end-osx.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -51,19 +51,6 @@
   static const std::string&
   getScheme();
 
-public: // management
-  bool
-  isTerminalMode() const final;
-
-  void
-  setTerminalMode(bool isTerminal) const final;
-
-  bool
-  isTpmLocked() const final;
-
-  bool
-  unlockTpm(const char* pw, size_t pwLen) const final;
-
 public: // crypto transformation
   /**
    * @brief Sign @p bufs with @p key using @p digestAlgorithm.
@@ -103,7 +90,7 @@
   doImportKey(const Name& keyName, shared_ptr<transform::PrivateKey> key) final;
 
 private:
-  class Impl;
+  struct Impl;
   const unique_ptr<Impl> m_impl;
 };
 
diff --git a/ndn-cxx/security/tpm/tpm.cpp b/ndn-cxx/security/tpm/tpm.cpp
index 9e150de..50ab3a4 100644
--- a/ndn-cxx/security/tpm/tpm.cpp
+++ b/ndn-cxx/security/tpm/tpm.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -91,6 +91,9 @@
   return key ? key->decrypt(buf) : nullptr;
 }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
 bool
 Tpm::isTerminalMode() const
 {
@@ -115,6 +118,8 @@
   return m_backEnd->unlockTpm(password, passwordLength);
 }
 
+#pragma GCC diagnostic pop
+
 ConstBufferPtr
 Tpm::exportPrivateKey(const Name& keyName, const char* pw, size_t pwLen) const
 {
diff --git a/ndn-cxx/security/tpm/tpm.hpp b/ndn-cxx/security/tpm/tpm.hpp
index feae793..ef67fbd 100644
--- a/ndn-cxx/security/tpm/tpm.hpp
+++ b/ndn-cxx/security/tpm/tpm.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -129,30 +129,38 @@
 public: // Management
   /**
    * @brief Check if the TPM is in terminal mode.
+   * @deprecated
    */
+  [[deprecated]]
   bool
   isTerminalMode() const;
 
   /**
    * @brief Set the terminal mode of the TPM.
+   * @deprecated
    *
    * When in terminal mode, the TPM will not ask user permission from GUI.
    */
+  [[deprecated]]
   void
   setTerminalMode(bool isTerminal) const;
 
   /**
    * @return true if the TPM is locked, otherwise false.
+   * @deprecated
    */
+  [[deprecated]]
   bool
   isTpmLocked() const;
 
   /**
    * @brief Unlock the TPM.
+   * @deprecated
    *
    * @param password The password to unlock the TPM.
    * @param passwordLength The password size.
    */
+  [[deprecated]]
   [[nodiscard]] bool
   unlockTpm(const char* password, size_t passwordLength) const;
 
diff --git a/tools/ndnsec/main.cpp b/tools/ndnsec/main.cpp
index 7609345..aa6ce37 100644
--- a/tools/ndnsec/main.cpp
+++ b/tools/ndnsec/main.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -35,7 +35,6 @@
 
 Available commands:
   help           Print this help text
-  version        Print program version
   list           List all known identities/keys/certificates
   get-default    Show the default identity/key/certificate
   set-default    Change the default identity/key/certificate
@@ -47,9 +46,9 @@
   cert-install   Import a certificate from a file
   export         Export an identity as a SafeBag
   import         Import an identity from a SafeBag
-  unlock-tpm     Unlock the TPM
+  version        Print version information
 
-Try 'ndnsec COMMAND --help' for more information on a command.
+Run 'ndnsec COMMAND --help' for more information on a command.
 )STR";
 
 int
diff --git a/tools/ndnsec/unlock-tpm.cpp b/tools/ndnsec/unlock-tpm.cpp
index 97cd702..e76d7f1 100644
--- a/tools/ndnsec/unlock-tpm.cpp
+++ b/tools/ndnsec/unlock-tpm.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2024 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -33,6 +33,8 @@
 int
 ndnsec_unlock_tpm(int argc, char** argv)
 {
+  std::cerr << "DEPRECATION NOTICE: ndnsec-unlock-tpm is deprecated.\n";
+
   namespace po = boost::program_options;
 
   po::options_description description(
@@ -68,7 +70,10 @@
     return 1;
   }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
   bool isUnlocked = keyChain.getTpm().unlockTpm(password, std::strlen(password));
+#pragma GCC diagnostic pop
   OPENSSL_cleanse(password, std::strlen(password));
 
   if (isUnlocked) {
