Файл магазину ключів, сформований Keytool, зберігає пари приватних та відкритих ключів. Кожна пара або запис, що зберігаються у сховищі ключів, позначається унікальним псевдонімом. Коротко:
Запис у сховищі ключів = пара приватний + відкритий ключ = ідентифікований псевдонімом
Зберігання ключів захищає кожен приватний ключ своїм індивідуальним паролем, а також захищає цілісність усього сховища ключів за допомогою (можливо іншого) пароля.
Наприклад, коли ви підписуєте програму Android за допомогою опції Експортувати підписаний додаток інструменту Eclipse Android, вам пропонується спочатку вибрати магазин ключів, а потім вибрати один псевдонім / запис / пару з цього магазину ключів. Після надання паролів як для сховища ключів, так і для обраного псевдоніма, програма підписується, а відкритий ключ (сертифікат) для цього псевдоніма вбудовується в файл .apk.
Тепер, щоб відповісти на ваше запитання, ви можете випустити оновлення програми, підписаної псевдонімом 'foo', повторно підписавши оновлення тим самим псевдонімом. Втрата сховища ключів, де зберігається ваш псевдонім, не дозволить вам випустити оновлену версію програми.
Однак є спосіб підписати програму з новим псевдонімом, але він передбачає клонування існуючого псевдоніма в сховищі ключів за допомогою keytool -keyclone :
Створює новий запис у сховищі ключів, який має такий самий приватний ключ та ланцюжок сертифікатів, що і вихідний запис.
Оригінальний запис ідентифікується псевдонімом (за замовчуванням "mykey", якщо не вказано). Новий запис (призначення) ідентифікується dest_alias. Якщо в командному рядку не вказано псевдонім призначення, користувачеві буде запропоновано вказати його.
Якщо пароль приватного ключа відрізняється від пароля сховища ключів, запис буде клоновано лише за умови наявності дійсного ключа. Це пароль, який використовується для захисту приватного ключа, пов'язаного з псевдонімом. Якщо в командному рядку не вказано жодного пароля ключа, а пароль приватного ключа відрізняється від пароля сховища ключів, користувачеві буде запропоновано ввести його. При бажанні закритий ключ у клонованому записі може бути захищений іншим паролем. Якщо в командному рядку не вказано жодної опції -new, користувачеві буде запропоновано ввести пароль нового запису (і він може вибрати, щоб він був таким же, як і для приватного ключа клонованого запису).
Більше інформації:
http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html
http://developer.android.com/guide/publishing/app-signing.html